mysql慢查询分析
2021/8/30 2:06:08
本文主要是介绍mysql慢查询分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
mysql慢查询分析
什么叫做慢查询,如何可以查到慢查询的记录
顾名思义慢查询就是查询的语句反应时间超过阀值的时间,设置慢查询的全局配置就需要在配置文件my.cnf slow_query_log=1: #是否开启慢查询日志,1表示开启,0表示关闭,(默认为关闭) slow_query_time=1 # 设置慢查询的阀值,单位为(s) slow_query_log_file=/tmp/mysql_slow.log # 慢查询的相关信息log的路径
解决慢查询的常用方法
- 分库分表
- 读写分离
- 创建索引
索引的数据结构
B+树
特点
1. B+树的层级少:相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快; 2. B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定; 3. B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。 4. B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可,,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。
常见mysql中B+树的层级(3-4层)why?
InnoDB存储引擎最小的存储单元是(页), 每一页的大小是16k(即16384个字节),每一行数据大概就是1k左右,那么一页就可以存16条数据 那么在InnoDb中2层的高度的B+树能存多少条数据,我们来分析一下: 在InnoDB中每个指针为6个字节,一个键值4-8个字节(如:Id为主键 -> bigInt类型是8字节)那么加起来就是14个字节, 那么一页能存16384/14 =1170个指针, 所以2层的B+树能存1170*16=18720条数据 在InnoDB在B+树高度一般为3层所以1170 * 1170 * 16= 21902400 条数据,能存千万级别的数据
索引的命中原则
创建一个表:id,name,age,gender id为主键,name为普通索引
回表(二次查询)
select * from table where name=zhangsan --先根据name查询name的B+树,找到对应的id,后根据id到id的B+中查到所有的数据,这个过程叫做回表
索引覆盖
select id,name from table where name=zhangsan --先根据name到name的B+树上找到紫叶节点,能够找到name,id的值,就不需要回表了,这个过程叫做索引覆盖
最左前缀
id,name,age,gender id为主键,name,age是组合索引
select * from table where name=zhangsan and age=1 (可以) select * from table where name=zhangsan (可以) select * from table where age=1 (不可以) select * from table where age=1 and name=zhangsan (可以)
索引下推
id,name,age,gender id为主键,name,age是组合索引
select * from table where name=zhangsan and age=1 --没有索引下推之前:先根据name去存储引擎中拉取数据,然后在server层中对age的数据过滤 --有了索引下推之后:直接根据name和age的值对存储引擎拉取数据,不需要到server层去数据过滤
sql语句的执行模块
数据查询分析命令 explain
mysql> explain select * from servers; +----+-------------+---------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | servers | ALL | NULL | NULL | NULL | NULL | 1 | NULL | +----+-------------+---------+------+---------------+------+---------+------+------+-------+ row in set (0.03 sec)
expalin使用详情
这篇关于mysql慢查询分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Mysql安装教程:新手必看的详细安装指南
- 2024-11-18Mysql安装入门:新手必读指南
- 2024-11-18MySQL事务MVCC原理入门详解
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南