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

sql索引优化-force index

时间:2020-05-18 20:35:43      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:dex   use   拓展   筛选   客户   出现   ima   使用   sele   

  本周有个优化sql任务,有一条sql慢查询,起初看了下感觉并没有什么问题,但是就是出现了慢查询,后来细究后发现了问题:

  sql:select id, name, mtime, ....  from a force index (mtime)  where id >= ? and mtime >= ? and mtime <= ? and name = ? and .....  order by id limit ?

  现状:因为是客户表,表字段比较多,此表共有10个索引,然后此sql语句用了其中2个索引,因为考虑到sql的索引选择器可能会选择错误,所以使用了force index,强制使用索引,此sql强制了使用修改时间:mtime。

  初看时没问题的,但是后来根据脚本逻辑发现,根据时间筛选出范围,然后再根据id,每次查200条进行逻辑处理,第一次sql查询的时候用mtime索引确实没问题,但是后续每次循环取200条数据,并没有用到主键id索引,这样就造成了慢查询。

  修改:force index (mtime) 改为 force index (mtime,primary),这样可以让sql选择器自己再进行选择,是使用mtime更加快还是用id主键更快

  ps 拓展:1、ignore index 忽略某个索引。 2、force index 强制使用某个索引,如果这个索引没有用上,则会全表扫描。  3、use index 建议使用某个索引,如果这个索引没用上,会再寻找其它索引

sql索引优化-force index

标签:dex   use   拓展   筛选   客户   出现   ima   使用   sele   

原文地址:https://www.cnblogs.com/xingyuecanxue/p/12912593.html

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