sql索引优化-force index

Posted 星月残雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 建议使用某个索引,如果这个索引没用上,会再寻找其它索引

以上是关于sql索引优化-force index的主要内容,如果未能解决你的问题,请参考以下文章

mysql force index() 强制索引的使用

mysql hint优化器提示之使用force index 强制使用索引和指定禁用索引

MySQL force Index 强制索引概述

mysql force index 简单使用

MySQL索引原理及SQL优化

SQL Server 索引优化 ——索引缺失