联合索引的触发条件
在MySQL InnoDB 的存储引擎中,创建表的时候,是需要创建主键的,而且主键也是一个唯一索引,创建索引的目的就是为了提高查询的效率,而索引的分类有:
单列索引、复合索引、唯一索引、主键索引、全文索引、Hash索引、B+树索引等等。
对于复合索引的创建,如下:
CREATE TABLE `student` ( `STUDENTID` int NOT NULL, `STUDENTNAME` varchar(20) DEFAULT NULL, `STUDENTIDENTIFY` int NOT NULL, PRIMARY KEY (`STUDENTID`,`STUDENTIDENTIFY`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;插入一些数据之后分析:
现在表中有6条数据,执行以下操作:
1、第一种情况:符合索引的全部 AND 触发。
EXPLAIN SELECT * FROM STUDENT WHERE STUDENTID = 1 AND STUDENTIDENTIFY = 11 ;分析结果:显示的是查找了1行。
再做以下操作:
2、复合索引的全部 OR 触发
EXPLAIN SELECT * FROM STUDENT WHERE STUDENTID = 1&nbs***bsp;STUDENTIDENTIFY = 11 ;分析结果是:查找了6条
3、复合索引的前缀部分触发
EXPLAIN SELECT * FROM STUDENT WHERE STUDENTID = 1 ;分析结果:查找了 1 条
4、符合索引的非前缀部分,也就是其他的部分,这里演示后缀的部分
EXPLAIN SELECT * FROM STUDENT WHERE STUDENTIDENTIFY = 11 ;分析结果:查找了 6 条
总结:
复合索引的触发条件:
1、使用复合索引的全部索引键,并且是AND条件,是可以触发复合索引的使用的。
2、使用复合索引的全部索引键,但不是AND或许是OR,这样子是不能触发复合索引的使用的。
3、使用复合索引的前缀部分索引键,是可以触发复合索引的使用的。
4、使用复合索引的非前缀索引键,是不能触发复合索引的使用的。
对于不能触发复合索引的情况下,查找一个数据,是需要查找所有的数据行的。