为何要用联合索引?mysql
对于查询语句“SELECT T.* FROM T WHERE T.c1=1 AND T.c3=2”涉及到两列,这个时候咱们通常采用一个联合索引(c1, c3);而不用两个单列索引,这是由于一条查询语句每每应为mysql优化器的关系只用一个索引,就算你有两个索引,他也只用一个;在只用一个的基础之上,联合索引是会比单列索引要快的;sql
下面讲讲联合索引的使用规则和哪些状况会命中不了联合索引mysql优化
示例以下。首先建立表: CREATE TABLE T (c1 INT, c2 VARCHAR(9), c3 INT, PRIMARY KEY(c1, c3)); 这样就创建了一个联合索引:c1,c3优化
触发联合索引是有条件的: 一、使用联合索引的所有索引键,可触发索引的使用。 例如:SELECT T.* FROM T WHERE T.c1=1 AND T.c3=2索引
二、使用联合索引的前缀部分索引键,如“key_part_1 <op>常量”,可触发索引的使用。 例如:SELECT T.* FROM T WHERE T.c1=1基础
三、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 <op>常量”,不可触发索引的使用。 例如:SELECT T.* FROM T WHERE T.c3=1查询
四、使用联合索引的所有索引键,但索引键不是AND操做,不可触发索引的使用。 例如:SELECT T.* FROM T WHERE T.c3=2 OR T.c1=1