索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助大家解决大多数的Mysql的性能优化问题
1.索引的使用
1.1创建联合索引
create index ids_seller_name_sta_addr on tb_seller(name,status,address);
通过explain可以查询是否使用了索引
1.2最左前缀法则
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左列开始,并且不跳过索引中的列。
因为查询条件没有name不走索引
中间跳过了status,就只走name索引
1.3范围查询不走索引
范围查询右边的列,不能走索引
1.4不要在索引列上进行运算操作,索引将失效
1.5字符串不加单引号,造成索引失效
1.6尽量使用覆盖索引,避免select *
如果查询列,超出索引列,也会降低性能
Using index condition
因为索引只保存了name的值 需要回表查询出其余是数据
因为只用了索引列 不需要回表查询
1.7用or分割开的条件,如果or前面的条件中的列有索引,而后面的列没有索引,那么涉及的索引都不会被用到
1.8模糊匹配
以%开头的Like模糊查询,索引失效。
如果仅仅是尾部模糊匹配,索引不会失效,如果是头部模糊匹配,索引失效。
通过覆盖索引来解决失效问题
超出索引列的搜索字段 使用前%模糊索引 导致索引失效
1.9如果mysql评估使用索引比全表更慢,则不使用索引
匹配的数据量比较大可能走索引
1.10 is NULL, is not NULL有时索引会失效
根据数据匹配的数据量
1.11 in走索引,not in索引失效
1.12 单列索引和复合索引
尽量使用复合索引,而少使用单列索引
使用单列索引时,数据库会选择一个最优的索引(辨识度最高索引)来使用,并不会使用全部索引
2.索引的使用情况
show status like 'Handler_read%';
show global status like 'Handler_read%';