MYSQL高级第二天(4)

一、索引的使用:

索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的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 索引失效的情况:

  1. 不遵循最左前缀法则;(和索引字段的顺序无关,只看包不包含);
  2. 范围查询右边的列,索引失效;
  3. 索引列上进行计算;
  4. 字符串列不加引号;
  5. 用or分隔开的条件,or前后的条件都必须同时有索引,否则索引失效;
  6. 以%开头的like模糊查询;
  7. 如果mysql评估使用索引比全表查询更慢,则不使用索引;
  8. is null,is not null有时索引失效;
  9. in走索引,not in索引失效;
  10. 包含最左前缀的列,但条件中间出现跳跃,则缺失字段后面的索引失效。(同爬楼梯,中间不能断层)。

1.4 查看索引使用情况:

show status like "Handler_read%";        --当前会话
show global status like "Handler_read%";      --全局

 

注意:

  1. 使用select *的时候,如果存在索引范围外的字段,则使用索引后,仍需要回表查询;
  2. 单列索引不需要遵循最左前缀法则,只有复合索引才需要遵循;
  3. 多个单列索引,数据库会自动选择最优索引(辨识度最高【查询记录越少,辨识度越高】);
  4. 尽量使用复合索引,少使用单列索引。
posted @ 2022-07-12 22:14  哆啦阿梦  阅读(18)  评论(0编辑  收藏  举报