范围查询数据量过大导致索引失效

存在索引idx_fk_customer_id(customer_id),表中数据16000条。

EXPLAIN SELECT * FROM rental WHERE customer_id<102; # 使用索引
EXPLAIN SELECT * FROM rental WHERE customer_id<103; # 全表扫描

当范围查询时,如果符合条件的数据过多时,因为建立索引的字段虽然在索引树上有序,但是这一部分数据还要回源到聚簇索引中再次查询,并且得到的数据在磁盘上并不是连续的,这样会产生大量的随机IO,而随机IO是非常慢的,与其这样还不如全表扫描。全表扫描最起码是顺序IO。

Semi join半连接

  • explain列中filtered为什么有时候不准
  • Extra列中Using index condition都是索引下推吗?
最后修改:2022 年 06 月 23 日
如果觉得我的文章对你有用,请点个赞吧~