一个sql问题

luozh29 2013-12-04 04:25:23
有2张表,表1中的一个字段包含在表2中一个字段值中。现在做2张表关联,怎么连接才能使查询速度更快。用like太慢,数据量比较大。望大侠指点
...全文
256 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
还是江筱吧 2013-12-06
  • 打赏
  • 举报
回复
引用 13 楼 luozh29 的回复:
感谢各位的解答
居然结贴了! like操作本身就是需要逐条匹配的,你想啊,它和排序有密切关系。 如果你不扔掉like,估计怎么建立索引页用不上。 我最初的想法是把t1的字段a作为key,将t2的字段b拆开成集合(排列组合)存储起来,换成 in 操作。还想试试结果呢。
霜寒月冷 2013-12-05
  • 打赏
  • 举报
回复
没什么非常的办法,模糊查询+分页
唐诗三百首 2013-12-05
  • 打赏
  • 举报
回复
可考虑用全文索引试试,其比较适合模糊查询.
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
如果表1和表2,的关联字段的内容,不经常变化的话。 可以考虑建1个关系表,里面存放了对应关系,比如: id1,id2 1,2 5,2 意思是,表1中的id为1的字段内容,包含在表2的id为2的字段内容中。 就是这样,到时候关联,就不用原来的字段,直接通过这样: select * from 表1 t1 inner join 关系表 t2 on t1.id = t2.id1 inner join 表2 t2 on t2.id = t2.id2
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
这种情况确实麻烦,因为建了索引,由于你是 like '%xxx%' 所以索引也是用不上的。 对了 ,你的 :表一种的字段a的内容【abc】,表二中字段b的内容是【1212abc3(⊙o⊙)…34】 也就是表1和表2,的关联字段的内容,会经常变化吗
t101lian 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 luozh29 的回复:
[quote=引用 4 楼 HelloMicrosoft 的回复:] 是不是表一中字段a的内容【abc】,表二中字段b的内容是【1212abc3(⊙o⊙)…34】? 你用where t2.b like '%'+t1.a+'%' 你先说是不是这个意思,索引不能从根本解决,除非放弃like 回复之后再说怎么弄
就是类似于这种情况[/quote] 表字段设计的时候就有问题啦,不过就算建索引也没什么效果。 现在要查询只能这样,
luozh29 2013-12-05
  • 打赏
  • 举报
回复
感谢各位的解答
luozh29 2013-12-05
  • 打赏
  • 举报
回复
引用 9 楼 yupeigu 的回复:
如果表1和表2,的关联字段的内容,不经常变化的话。 可以考虑建1个关系表,里面存放了对应关系,比如: id1,id2 1,2 5,2 意思是,表1中的id为1的字段内容,包含在表2的id为2的字段内容中。 就是这样,到时候关联,就不用原来的字段,直接通过这样: select * from 表1 t1 inner join 关系表 t2 on t1.id = t2.id1 inner join 表2 t2 on t2.id = t2.id2
感谢您的回答,这个问题是比较头疼。我想想其他的办法。
luozh29 2013-12-04
  • 打赏
  • 举报
回复
引用 4 楼 HelloMicrosoft 的回复:
是不是表一中字段a的内容【abc】,表二中字段b的内容是【1212abc3(⊙o⊙)…34】? 你用where t2.b like '%'+t1.a+'%' 你先说是不是这个意思,索引不能从根本解决,除非放弃like 回复之后再说怎么弄
就是类似于这种情况
發糞塗牆 2013-12-04
  • 打赏
  • 举报
回复
这种情况全文索引估计也不会有什么效果
还是江筱吧 2013-12-04
  • 打赏
  • 举报
回复
是不是表一中字段a的内容【abc】,表二中字段b的内容是【1212abc3(⊙o⊙)…34】? 你用where t2.b like '%'+t1.a+'%' 你先说是不是这个意思,索引不能从根本解决,除非放弃like 回复之后再说怎么弄
luozh29 2013-12-04
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
如果有规律,可以把表2的这个列中的一些具有标识性的值提取出来单独做一列,加上索引,表一关联时关联这个列,而不是原有的列
就是没有规律,表2中这个字段就好比一个备注栏,会输入一大堆数据可能会输入表1中的这个字段值,现在2张表只能用这个字段作为关联条件。
Landa_Jimmy 2013-12-04
  • 打赏
  • 举报
回复
创建适当的索引,但是不能用模糊查询,模糊查询的话索引就不适用了。
發糞塗牆 2013-12-04
  • 打赏
  • 举报
回复
如果有规律,可以把表2的这个列中的一些具有标识性的值提取出来单独做一列,加上索引,表一关联时关联这个列,而不是原有的列

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧