阅读 275
【MYSQL】学习笔记 | 一图了解索引

【MYSQL】学习笔记 | 一图了解索引

索引

1. 什么是索引?

索引相当于书签,图书馆的目录。可以快速的寻找到位置。

是一种单独的、物理的数据库表中一列或多列进行排序的数据结构。

备注:B+Tree 可以对 <,<=,=,>,>=,BETWEEN,IN,以及不以通配符开始的 LIKE 使用索引。(MySQL 5.5 后)

2. 索引的优缺点

优点:

  1. 索引大大减小了服务器需要扫描的数据量。
  2. 索引可以帮助服务器避免排序和临时表。
  3. 索引可以将随机 I/O 变成顺序 I/O。

缺点:

  1. 查询速度提高,其他的操作效率降低,会导致数据页空间利用率降低。
  2. 小表无需索引。
  3. 列包含重复数据较多,无需索引。
  4. 索引文件会导致,索引文件变大。

3. 索引限制个数为16个。

4.MySql主要使用的数据结构?

二叉排序树 → 二叉平衡树 → B-Tree(B树) → B+Tree(B+树)

以下图片来源于网络

5. 主要知识点

  1. 回表查询,命中索引后还要回去聚簇索引中查找其他数据,少用select *。
  2. 索引覆盖,如果明确了列,就不需要回表,这也是为什么要避免select *的原因。
  3. 最左前缀原则,因为B+树是从左到右的顺序,匹配的时候也就从左到右,a,b,c三个是联合索引,按照最左前缀的原则,只要a是第一个,

索引才生效,相当于创建了联合索引(a,b),(a,c),(a,b,c) 4. 索引下堆优化

select * from table where name like '陈%' and age > 26;
1.命中name索引,然后进行回表
2.命中name索引,在命中age索引,然后进行回表
复制代码

6. 注意事项

  1. 索引列不能为null
  2. 使用短索引,一般开头几个字符不同的时候适合创建。
alter table yy_order add index `test_kkkk`(`car_uuid`(4));
复制代码
  1. 索引如果已经进行where排序,在order上则失效。
  2. 不要在索引列上进行操作,否则会进行全表扫描。
  3. 不要使用not in和<>避免索引失效。

7. 命令

-- 查询当前索引使用情况
show status like '%Handler_read%';
-- 查看慢查询
-- 1.日志分析工具mysqldumpslow
-- 2.sql命令开启
- 查看日志输出方式
show variables like '%log_output%';
 -- 未使用索引记录
show variables like 'log_queries_not_using_indexes';
 set global log_queries_not_using_indexes=1;

 set global long_query_time=4;

show variables like '%slow%';
-- slow_launch_time: 慢查询超过的执行时间值
-- slow_query_log: 是否打开慢查询日志功能
-- show_query_log_file:慢查询日志目录
复制代码

8. 索引优化

  1. 优化group by,默认情况下会对group by进行排序,想要避免排序结果消耗,可以指定order by null禁止排序
  2. 覆盖索引避免回表,不要*
  3. 最左原则,例如xyz联合索引,当y使用了>等其他符号,后面按的索引就失效了
  4. 索引列上不能使用表达式或函数
  5. 尽量选择不重复的值作为索引

6.前缀索引和索引列的选择

脑图地址:不足之处欢迎大家补充 www.processon.com/mindmap/5f6…

文章分类
后端
文章标签