码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver 关联查询 charindex 函数 查询慢,不使用索引问题解决办法

时间:2017-05-09 13:49:44      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:根据   关键字   索引   解决方案   har   导致   sqlserver   失效   效率   

问题:

  两张表 数据都非常多

      A表中A1字段 需要关联B表主键 查询

      A1 字段 存储多个B表主键

  格式为:

    格式1:b1,b2,b3

    格式2:b4

    格式3:b5,b6

      逗号分隔的占少数

      这样就导致在做关联查询时,必须使用 like ‘%...%‘,  charindex ,又或者replace(A1,b1,‘‘) <> A1 等手段,而在SqlServer中使用这些方法来查询,会触发全表检索,导致字段对应的索引失效,效率极低;

 

解决方案:

  前提:在逗号分隔的数据 与 直接关联的数据量有差异的情况下,如 总共100条数据,其中99 条都是A1 直接存储B表主键,有一条存储了多个B表主键,并用逗号分隔

  那么可以 采用分开查询,单个存储于多个存储值 的记录分开查询结果用 union 关键字做合并 如:

  

select AA.* from A AA
  where exists(
    select A.pk from A,B where A.A1 like ‘%,%‘ and charindex(B.pk,A.A1) > 0 and AA.pk = A.pk
    union all
    select A.pk from A,B where A.A1 =B.pk and AA.pk = A.pk
  )

其实就是根据数据量大小 将 需要使用全表检索的数据分开,而不影响其他不需要全表检索的数据查询速度,从而解决查询卡顿的问题

  

  

 

 

 

  

sqlserver 关联查询 charindex 函数 查询慢,不使用索引问题解决办法

标签:根据   关键字   索引   解决方案   har   导致   sqlserver   失效   效率   

原文地址:http://www.cnblogs.com/Acei/p/6830076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!