一、索引的使用:
索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的mysql的性能优化问题。
1.1 索引的使用:
create table tb_seller( sellerid varchar(100), name varchar(100), nickname varchar(50), password varchar(60), status varchar(1), address varchar(100), createtime datetime, primary key(sellerid) )engine=innodb default charset=utf8mb4;
创建索引:
create index idx_seller_name_sta_address on tb_seller(name,status,address);
1.2 避免索引失效:
1、全值匹配,对索引中所有列都指定具体值。
该情况下,索引生效,执行效率高。
2、最左前缀法则
如果索引了多列,要遵循最左前缀法则,指的是查询从索引的最左前列开始,并且不跳过索引中的列。
1.3 索引失效的情况:
- 不遵循最左前缀法则;(和索引字段的顺序无关,只看包不包含);
- 范围查询右边的列,索引失效;
- 索引列上进行计算;
- 字符串列不加引号;
- 用or分隔开的条件,or前后的条件都必须同时有索引,否则索引失效;
- 以%开头的like模糊查询;
- 如果mysql评估使用索引比全表查询更慢,则不使用索引;
- is null,is not null有时索引失效;
- in走索引,not in索引失效;
- 包含最左前缀的列,但条件中间出现跳跃,则缺失字段后面的索引失效。(同爬楼梯,中间不能断层)。
1.4 查看索引使用情况:
show status like "Handler_read%"; --当前会话 show global status like "Handler_read%"; --全局
注意:
- 使用select *的时候,如果存在索引范围外的字段,则使用索引后,仍需要回表查询;
- 单列索引不需要遵循最左前缀法则,只有复合索引才需要遵循;
- 多个单列索引,数据库会自动选择最优索引(辨识度最高【查询记录越少,辨识度越高】);
- 尽量使用复合索引,少使用单列索引。