1.最左前缀原则,联合索引index(a,b,c):指的是查询从索引的最左前列开始,并且不跳过索引中的列,和where中的查询条件顺序无关。a,b,c 类比于1楼,2楼,3楼,1->2->3,1->2, 1
查看索引执行情况关键字:explain
2.范围查询右边的列不能使用索引
3.不要在索引列上进行运算,索引将失效
4.字符串不加单引号,索引将失效
5.尽量使用覆盖索引(索引包含查询列),避免使用select *
Using index condition 索引回表查询
Using where,Using index 索引结构可以拿到数据
6.用 or 分割的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及的索引将不会被用到
and 不会是前面的索引失效
7.如果mysql评估使用索引比全表更慢,则不使用索引,根据数据存储的多少来决定
8. is NULL , is noy NULL 有时失效 ,NULL值多,is not NULL走索引
9.in走索引, not in 索引失效
10.单列索引和复合索引
尽量使用符合索引,而少使用单列索引。
创建复合索引
create index idx_name_sta_address on tb_table(name,status,address)
就相当于创建了3个索引:
name
name+status
name+status+address
创建单列索引
create index idx_table_name on tb_table(name);
create index idx_table_status on tb_table(status);
create index idx_table_address on tb_table(address);
数据库会选择一个最优的索引(辨识度最高的索引)来使用,并不会使用全部索引