网络异常,图片无法展示
|
索引
1. 什么是索引?
索引相当于书签,图书馆的目录。可以快速的寻找到位置。
是一种单独的、物理的数据库表中一列或多列进行排序的数据结构。
备注:B+Tree 可以对 <,<=,=,>,>=,BETWEEN,IN,以及不以通配符开始的 LIKE 使用索引。(MySQL 5.5 后)
2. 索引的优缺点
优点:
- 索引大大减小了服务器需要扫描的数据量。
- 索引可以帮助服务器避免排序和临时表。
- 索引可以将随机 I/O 变成顺序 I/O。
缺点:
- 查询速度提高,其他的操作效率降低,会导致数据页空间利用率降低。
- 小表无需索引。
- 列包含重复数据较多,无需索引。
- 索引文件会导致,索引文件变大。
3. 索引限制个数为16个。
4.MySql主要使用的数据结构?
二叉排序树 → 二叉平衡树 → B-Tree(B树) → B+Tree(B+树)
以下图片来源于网络
网络异常,图片无法展示
|
网络异常,图片无法展示
|
5. 主要知识点
- 回表查询,命中索引后还要回去聚簇索引中查找其他数据,少用select *。
- 索引覆盖,如果明确了列,就不需要回表,这也是为什么要避免select *的原因。
- 最左前缀原则,因为B+树是从左到右的顺序,匹配的时候也就从左到右,a,b,c三个是联合索引,按照最左前缀的原则,只要a是第一个, 索引才生效,相当于创建了联合索引(a,b),(a,c),(a,b,c)
- 索引下堆优化
select * from table where name like '陈%' and age > 26; 1.命中name索引,然后进行回表 2.命中name索引,在命中age索引,然后进行回表
6. 注意事项
- 索引列不能为null
- 使用短索引,一般开头几个字符不同的时候适合创建。
alter table yy_order add index `test_kkkk`(`car_uuid`(4));
- 索引如果已经进行where排序,在order上则失效。
- 不要在索引列上进行操作,否则会进行全表扫描。
- 不要使用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. 索引优化
- 优化group by,默认情况下会对group by进行排序,想要避免排序结果消耗,可以指定order by null禁止排序
- 覆盖索引避免回表,不要*
- 最左原则,例如xyz联合索引,当y使用了>等其他符号,后面按的索引就失效了
- 索引列上不能使用表达式或函数
- 尽量选择不重复的值作为索引 6.前缀索引和索引列的选择