今天看了下mysql的复合索引 总结如下:
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) DEFAULT NULL,
`cid` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_cid_INX` (`name`,`cid`),
KEY `name_INX` (`name`)
) ENGINE=INNODB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
EXPLAIN SELECT * FROM student WHERE NAME='小红';
EXPLAIN SELECT * FROM student WHERE cid=1;
EXPLAIN SELECT * FROM student WHERE cid=1 AND NAME='小红';
最左匹配原则 1会用到索引 type为ref 效率相对较高
3也会用到索引 type为ref效率较高 因为用到了最左字段 name
通过1与3对比发现 最左匹配原则并不是where后第一个条件一定是索引的第一列 只要where后用到了索引第一列就会用到索引,如果存在多个符合索引 则由索引优化器选择出最佳执行计划的索引
补充聚簇索引与非聚簇索引
主键时聚簇的 非主键的其它索引时非聚簇的
用非聚簇索引查询时效率会比使用聚簇索引低,因为非聚簇索引查询要分为两步:
首先查询出主键 然后在根据主键查询出记录