sql索引优化错误问题

  本周优化的sql索引,发到线上后发现反而查询效率变低了,仔细研究后发现索引选择器还是选择错误了。

  sql语句:where语句使用了主键id>?和时间索引mtime > ? and mtime < ?

  1、修改之前:使用强制索引force index,指定了mtime

  慢查询的原因:脚本第一次查询使用mtime索引确实正确,但是第一次查询后会将主键id查到,然后根据主键id去查,但是强制索引了时间后,每一次都循环了一天的数据去查,导致后面的效率变慢

  2、本次修改:使用强制索引force index,指定了mtime和primary

  慢查询的原因:脚本第一次查询时,mysql索引选择器选择了primary,而没有使用mtime,索引使用只能使用一个,因此第一次查询时id>0,就扫描了全表,导致效率很慢

  3、第二次优化修改:当第一次循环,id>0时,强制索引为mtime,后面第二次及以后,有了id后,则强制索引变为primary,这样就能使索引利用率最大

猜你喜欢

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