创建组合索引:一个表中可以有多个,用多个列组合构建的索引,这多个列中的值不允许有空值。
ALTER TABLE table_name ADD INDEX index_name(col1,col2,col3);
查询条件中包含索引的前缀部分, 也就是 col1, 可以触发索引的使用
select * from table_name where col1=1;
使用联合索引的全部索引键, 可触发索引的使用
select * from table_name where col1=1 and col2=2;
根据最左前缀原则查询条件中包含索引的前缀部分, 也就是 col1, 可以触发索引的使用
select * from table_name where col1=1;
使用部分索引键, 但不包含索引的前缀部分,不可触发索引的使用
select * from table_name where col2=2;
使用联合索引的全部索引键, 但不是AND操作, 不可触发索引的使用
select * from table_name where col2=2 or col1=1;
使用联合索引的,但是在索引列使用比较、计算的(包含不等于和not)不可触发索引的使用;
但是请注意在对主键和int类型的索引使用比较类型的则可以出发索引;
select * from table_name where col1>0;
使用联合索引的,但是在索引列使用比较、计算的不可触发索引的使用
select * from table_name where col1>0;
使用联合索引的,但是在索引列使用前导模糊查询、正则匹配的不可触发索引的使用
select * from table_name where col1 like "%1"; //不可命中索引
select * from table_name where col1 regex" “^%1"; //不可命中索引
select * from table_name where col1 like "1%"; //可以命中索引
使用联合索引的,但是在索引列使用In查询的不可触发索引的使用
select * from table_name where col1 in 1,2;
使用联合索引的,但是使用连接查询的不可触发索引的使用,因为连接查询是生成了临时表,因为临时表没有索引
select table_name.* from table_name,table_name2 where table_name.col1=1;
使用联合索引的,但是索引列类型与查询条件的类型不同的也不会触发索引(如索引类型是int,而查询条件是string)
select * from table_name where col1='0';
网友评论