mysql的索引优化问题

1、order by 和limit导致索引失效问题

表中设置了三个索引:end_time,execute_state , event_type 三个独立索引。order by end_time limit 为1500 。分析结果type为range为索引范围查询,key为end_time索引。 extra为using index condition 使用到了索引。但是将limit改为6000结果为


结果为全表扫描。原因 mysql估算查询的行数可能会太多,范围查找优化将不会被使用。

在数据大的量下进行测试:

425205个

limit 为15400的时候 rows 值为418222 , mysql认为    近似425205 所以全表扫描了。


2、or 语句可能导致的全表扫描问题



总结 or语句可能会造成全表扫描。一般情况下 or 两边是不同字段会造成全表扫描,例如 A or B ,但是A or A 可能会使用索引也可能全表扫描,取决于rows值就是mysql会认为需要扫描多少数据。  通常A or A 会加一个限制,mysql会估算会扫描多少行。也可以加limit来限制取多少行,这样就可以继续使用索引。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容