[MySQL] 联合索引与using index condition
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.这时就会出现下面的情况
1
2
3
4
5
6
7
8
9
10
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
- type值为range、 ref、 eq_ref或者ref_or_null的时候 , 会使用到索引条件下推技术