mysql优化

mysql优化

1. 什么是索引?

在这里插入图片描述

数据结构展示网址
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mysql 默认的磁盘大小是16kb

2. myIsam

数据库表中的数据和索引放在哪里? 答:磁盘
放在磁盘的哪个地方?默认放在安装mysql的data目录下面
在这里插入图片描述
.frm :表结构
.MYD:存储表中数据
.MYI:存储索引

MyISAM存储引擎,索引对应的叶子节点对应的data,放的是30这个索引所在行的磁盘文件地址。它会把这个磁盘文件地址,拿出来去MYD磁盘文件中快速的把这一行数据找到并加载出来。
在这里插入图片描述

3.Innodb


在这里插入图片描述
innodb 叶子节点放的是:索引所在行的其他所有列的数据
innodb 非主键索引也是一种非聚集索引,存在回表的多的一次查询
非聚集索引展示如下:
在这里插入图片描述
在这里插入图片描述

4. 联合索引

在这里插入图片描述

5. 索引

5.1 索引的种类

在这里插入图片描述

5.2 常见的索引结构和数据区别

MySQL默认的索引结构是B+树
在这里插入图片描述

5.2.1 二叉树

磁盘的io次数越多,检索数据效率越低
在这里插入图片描述
在这里插入图片描述

5.2.2 红黑树

在这里插入图片描述
在这里插入图片描述

5.2.3 B树(平衡多路查找树)

1个节点上面可以存储多个元素
MySQL实现的是16阶的B+树,1个节点可以放15个元素,最多可以有16个分支。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.4 B+树

在这里插入图片描述
在这里插入图片描述
1.所有的数据都存储在叶子节点
2.非叶子节点上没有存储数据
3.叶子节点的每一个节点上放置了双向指针:优化B树对范围查询的问题

5.2.5 面试题:为什么Mysql会选择B+树作为默认索引数据结构?

在这里插入图片描述
在这里插入图片描述

5.2.6 如果一个表没有主键索引还会创建B+树吗

在这里插入图片描述
row-id

5.2.7 Hash索引(了解)在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.8 聚簇索引和非聚簇索引

在这里插入图片描述
在这里插入图片描述
聚簇索引,索引和数据都存储在叶子节点
非聚簇索引的叶子节点除了存储索引还存储了数据的存储指针,要查询数据,需要根据这个指针去寻址对应的数据
在这里插入图片描述

5.2.9 二级索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.10 覆盖索引

在这里插入图片描述

在这里插入图片描述

5.2.11 索引下推

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.12 联合索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.13 单列索引,联合索引适用于什么样的场景?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.14 索引什么时候用?

在这里插入图片描述
在这里插入图片描述

6. 优化

在这里插入图片描述
在这里插入图片描述

6.1EXPLAIN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.1.1 id 列

在这里插入图片描述
1、id序号相同
在这里插入图片描述
2、id序号不同
在这里插入图片描述
3、两种都存在
在这里插入图片描述
4、显示为NULL
在这里插入图片描述
在这里插入图片描述

6.1.2 select_type

在这里插入图片描述
1、simple
在这里插入图片描述
在这里插入图片描述
2、primary
在这里插入图片描述

在这里插入图片描述
3、subquery

4、dependent subquery
在这里插入图片描述
5、derived
在这里插入图片描述
6、union
在这里插入图片描述
7、union all
在这里插入图片描述
8、dependent union
在这里插入图片描述
9、union result
在这里插入图片描述
在这里插入图片描述

6.1.3 type 列

1、system
在这里插入图片描述
在这里插入图片描述
2、const
在这里插入图片描述
3、eq_ref
在这里插入图片描述

6.1.4 key_len

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.1.5 ref

在这里插入图片描述

7. 索引优化实践

在这里插入图片描述
在这里插入图片描述

7.1 最左前缀原则

在这里插入图片描述
1、
在这里插入图片描述
2、
在这里插入图片描述
3、
在这里插入图片描述
如果想要索引生效,要记住:有序这个规则
在这里插入图片描述
1、
在这里插入图片描述
2、
在这里插入图片描述
如果用到了函数,需要在每个节点上面进行运算,此时需要全表扫描

3、
在这里插入图片描述
4、
在这里插入图片描述

7.1.2

在这里插入图片描述
使用了范围查询,后面的索引条件失效
在这里插入图片描述

7.1.3 尽量使用覆盖索引,减少使用select *

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7.1.4 不等于,空值,or 会导致索引失效

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用FORCE INDEX (索引) 来强制添加上索引
在这里插入图片描述

7.1.5 like 百分号写在最右侧

在这里插入图片描述
尽量使用后模糊进行查询
B+树,当我们使用中文进行索引时,会按照首字母来进行有序排序,如果第一个字都无法确认,那只能全表扫描
在这里插入图片描述

7.1.6 字符串不加单引号,索引失效

在这里插入图片描述

7.1.7 范围查询优化

在这里插入图片描述
在这里插入图片描述

7.1.8 总结

在这里插入图片描述

8. trace 用法

在这里插入图片描述
在这里插入图片描述

9. SQL优化规范

9.1 避免使用select *

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

9.2 小表驱动大表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.3 连接查询代替子查询(具体情况具体分析 )

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.4 提升group by 效率

在这里插入图片描述

9.5 批量插入

在这里插入图片描述
在这里插入图片描述
在里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.6 使用limit

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
加粗样式
在这里插入图片描述

在这里插入图片描述

9.7 使用union all 代替 union

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值