Mysql中的索引下推优化

当索引下推开启后,如果where子句中的部分条件可以通过索引中的列来进行过滤,MySQL会把这部分条件也下推给存储引擎。这里的关键是下推的这部分条件用于过滤而非定位数据。

直接看官方的例子:

SELECT * FROM people
  WHERE zipcode='95054'
  AND lastname LIKE '%etrunia%'
  AND address LIKE '%Main Street%';

假设people表上存在索引INDEX (zipcode, lastname, firstname),由于第二个条件lastname LIKE '%etrunia%'前后都有%所以不能使用索引。如果没有索引下推,那么MySQL只能让存储引擎完整的读取所有符合zipcode='95054'的行然后交给MySQL服务器进行筛选。有了索引下推,由于lastname也在索引中,所以MySQL可以把两个查询条件都传给存储引擎,存储引擎读取到所有符合zipcode条件的索引元组后通过索引中的数据先过滤一次,符合条件的再读取完整的行。如下图:

posted @ 2024-05-12 22:14  Narcissu5  阅读(16)  评论(0编辑  收藏  举报