1.测试联合索引的最左原则的时候, 发现了5.6版本后的新特性Index Condition Pushdown
2.含义就是存储引擎层根据索引尽可能的过滤数据,然后在返回给服务器层根据where其他条件进行过滤
3.比如我有这样的联合索引 KEY `name_gid_age_index` (`name`,`gid`,`age`) , 查询的时候where name='taoshihan' and age=1 , 没有按顺序连续查条件, 后面那个age就用不到索引
4.这时就会出现下面的情况
CREATE TABLE `index_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
`gid` int(11) NOT NULL DEFAULT '0',
`age` int(11) NOT NULL DEFAULT '0',
`score` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `name_gid_age_index` (`name`,`gid`,`age`),
KEY `score_index` (`score`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

5. type值为range、 ref、 eq_ref或者ref_or_null的时候 , 会使用到索引条件下推技术
本文探讨了MySQL 5.6版本后的IndexConditionPushdown特性,解释了存储引擎如何根据索引过滤数据,减少服务器层的数据处理负担。通过实例说明了在联合索引中,即使不遵循最左原则,索引条件下推仍能有效提升查询效率。

343





