为什么语句查询这么慢?加like后反而更快?

baidu_36196347 2016-09-21 09:58:22
表neo_rea 250万行
flag字段主要有1,0,10三种,是int字段,有索引。主要是1,0和10很少。
com_id字段有索引
idate_unixTime 是unix时间,也是int型,有索引
id是聚集索引:
SQL语句:
SELECT top 12 p.[ID],p.[name],p.[code],p.price,p.[intro],p.img,p.[hits] as hits from neo_rea p where p.flag=1 and p.com_id=93303 order by p.idate_unixTime desc,p.id desc

执行要13秒!!

如果中间加上一个like,象这样
上述语句变成:SELECT top 12 p.[ID],p.[name],p.[code],p.price,p.[intro],p.img,p.[hits] as hits from neo_rea p where p.flag=1 and cpmc like '%细胞%' and p.com_id=93303 order by p.idate_unixTime desc,p.id desc
只需要1秒,虽然有like。可能是因为“细胞”出现频率高,不需要全表扫描。

请高手指点,这种语句,如何优化?
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
初步看了下执行计划,问题在于key查找 开销为100% 参考我的博客,重新建索引解决问题 http://blog.csdn.net/travylee/article/details/8839809
baidu_36196347 2016-09-21
  • 打赏
  • 举报
回复
主要是com_id=93303太慢。在这个表中(250万行),约有5000家不同公司ID在其中。虽然加了索引(非簇),仍然十分缓慢。如果把这个去掉,速度很快。
baidu_36196347 2016-09-21
  • 打赏
  • 举报
回复
这里表reagent就是这个表neo_rea,reagent_id就是ID聚集索引
baidu_36196347 2016-09-21
  • 打赏
  • 举报
回复


去掉flag=1为10秒。
卖水果的net 2016-09-21
  • 打赏
  • 举报
回复
把 p.flag=1 这个条件去掉试试 贴一下执行计划吧
baidu_36196347 2016-09-21
  • 打赏
  • 举报
回复
问题解决!!多谢大神

22,210

社区成员

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

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