sql索引优化-force index

  本周有个优化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 建议使用某个索引,如果这个索引没用上,会再寻找其它索引

猜你喜欢

转载自www.cnblogs.com/xingyuecanxue/p/12912593.html