您当前的位置: 首页 >  sql

liaowenxiong

暂无认证

  • 1浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL的索引优化

liaowenxiong 发布时间:2021-10-21 19:57:47 ,浏览量:1

文章目录
  • 全值匹配
  • 最左前缀原则
  • 不在索引列上使用函数,会导致索引失效而转向使用全表扫描
  • 范围条件右边的索引列会失效
  • 尽量使用覆盖索引
  • 使用不等于操作符无法使用索引
  • is null,is not null 一般情况下也无法使用索引
  • like 以通配符开头的,索引会失效
  • 少用 or 或 in,MySQL 不一定使用索引
  • 查询范围过大,可能不会使用索引

全值匹配

例如,字段 film_id、actor_id 组成联合索引 idx_film_actor_id,那么在查询条件中使用到联合索引的全部字段,则表示全值匹配。

最左前缀原则

使用复合索引的前面字段,但是不能跳过使用后面的字段

不在索引列上使用函数,会导致索引失效而转向使用全表扫描 范围条件右边的索引列会失效 尽量使用覆盖索引 使用不等于操作符无法使用索引 is null,is not null 一般情况下也无法使用索引 like 以通配符开头的,索引会失效
mysql> select * from user where name like 'hello%'; -- 会使用索引,索引值的前面5个字符在索引树中是有序的
mysql> select * from user where name like '%hello'; -- 不会使用索引,索引值的后面的若干个字符在索引树中是无序的,所以无法使用索引

解决 like ‘%字符串%’ 索引不被使用的方法: 在这里插入图片描述

少用 or 或 in,MySQL 不一定使用索引

如果 in (…) 里面的字段不要太多也许会使用索引,or 也是一样;如果指定过多的字段,那么 MySQL 就会扫描索引树多次,所以可能会放弃使用索引

查询范围过大,可能不会使用索引
select * from user where age >= 1 and  age             
关注
打赏
1661566967
查看更多评论
0.3377s