MySQL数据库-优化慢查询

embedded/2024/11/14 20:52:29/
1、什么是慢查询?

慢查询就是SQL执行时间过长,严重影响用户体验的SQL查询语句。当它频繁出现时数据库的性能和稳定性都会受到威胁

慢查询是数据库性能瓶颈的常见原因,是指SQL执行时间超过阈值;可能由于复杂的连接、缺少索引、不恰当的查询设计或数据量过大而导致变慢。

2、如何解决慢查询?

重写查询、添加或优化索引、调整数据库配置等

 2.1、追踪慢查询

想要追踪慢查询,首先需要在mysql中有一个名为 long-query-time的配置项,它定义了慢查询的阈值。一旦SQL语句执行超过阈值,就会被标记为慢查询。通过一系列命令,我们可以轻松地查看、开启、关闭慢查询监控,并设置合适的阈值。当然,为了让这些配置永久生效,你还需要在 my.conf 文件中进行相应设置。

 3、怎样提升性能?

通过添加索引来提升查询速度,并揭示索引失效的常见场景。掌握这些必备技能,你将能够轻松应对各种性能挑战,让数据库运行更加高效稳定。

3.1、添加索引提升查询速度 
  1.  数据内存中比较相比mysql的查询产生io的耗时可忽略不计,所以查询速度取决于查询过程中的IO次数耗时,即提高查询次数的有效方法是减少IO次数(mysql的数据是存储在磁盘中) 
  2. MYSQL innoDB引擎索引数据结构是B+tree结构(树节点称为数据叶) 
  3. 每个数据叶默认大小为16kb(16384)(show VARIABLES like ‘innodb_page_size’;) 
  4. 对于主键索引,假设一行数据1kb,则叶子可存16条数据。
  5.     当B+Tree的高度为h = 2 则数据量为 1170 * 16 = 18720条数据。
  6.     当B+Tree的高度为 h = 3 则数据量为1170 * 11170 * 16 = 21902400条数据(2190.24万)
  7. 对于非主键索引,则叶子节点的索引信息有 16384 /(8+8)= 1024个索引信息。
  8. 若h=2 则数据量为 1170 * 1024 = 1198080。 
  9. 若h=3 则数据量为 117011701024 = 1401753600条数据(14亿零175.36万)。 
  10.  假设我们用bigint做为主键索引大概占8个字节,(B+tree特点)有指向下一个的指针大概占6个字符,则每个数据叶可以存放的索引信息有 16384 / (8 + 6)= 1170个索引信息。 
  11. 分析得出结论: 
  12. 非主键索引,索引覆盖,14亿条数据情况下只需要3次io即可查询到想要的数据
  13. 主键索引查询,2190.24万条数据情况下只走需要3次 io 即可查询到想要的数据 
3.2、索引失效场景 

了解索引失效的场景,避免因SQL语句索引失效而引起的慢查询: 

 结语:解决慢查询问题并非一蹴而就的过程,需要持续关注和不断优化。只有这样,你才能确保数据库始终保持在最佳状态,为业务发展提供强有力的支撑。


http://www.ppmy.cn/embedded/16037.html

相关文章

设计模式-迭代器模式(Iterator)

1. 概念 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素。迭代器模式的核心思想是将遍历集合的责任封装到一个单独的对象中,这样可以避免暴露集合内部的表示方式。这种模式通常用于提供一种方法来访问一个容器对象中各个…

GaussianCube:使用最优传输构造高斯溅射用于3D生成建模

GaussianCube: Structuring Gaussian Splatting using Optimal Transport for 3D Generative Modeling GaussianCube:使用最优传输构造高斯溅射用于3D生成建模 Bowen Zhang1⁣*    Yiji Cheng2⁣*   Jiaolong Yang3   Chunyu Wang3 张博文 1⁣* 程一季 2⁣* …

由于使用校园网,ubuntu虚拟机时而不能连接网络的解决方案

本来配置好了网络的虚拟机第二天又没网了,ping不通 在尝试过诸如下面的解决方案仍没有丝毫好转(这个时候意识到可能是用了校园网的缘故) VMWARE Ubuntu虚拟机和Windows10主机ping不通|Ubuntu断网、没有网络_vmware 桥接模式下 主机无法ping ubuntu虚拟机来自 192.168.110.95 的…

java8 LocalDateTime

LocalDateTime java8使用了LocalDateTime和DateTimeFormatter。比之前的Date和Carlendar有所改进。 DateTimeFormatter是线程安全的。DateTimeFormatter中很多属性使用了final修饰。 LocalDate: 只能设置仅含年月日的格式,表示没有时区的日期, LocalDate是不可变并…

达梦数据库的DMRMAN工具介绍

达梦数据库的DMRMAN工具介绍 DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的…

账号安全及应用

一、账号安全控制 1.1系统账号清理 将用户设置为无法登陆 锁定账户 删除账户 设定账户密码,本质锁定 锁定配置文件-chattr: -a 让文件或目录仅供附加用途。只能追加 -i 不得任意更动文件或目录。 1.2密码安全控制 chage 1.3历史命令 history&am…

C语言——九九乘法表

直接上代码实现九九乘法表&#xff0c;完整代码如下&#xff1a; #include <stdio.h>int main(){int i,j;for(i1;i<10;i){for(j1;j<i;j){printf("%d*%d%d\t",j,i,i*j);/*printf("%d*%d%-2d",j,i,i*j);*/}printf("\n");}return 0; }…

MySQL运维故障排查与高效解决方案

一、引言 MySQL作为关键的业务数据库&#xff0c;其稳定运行对于企业的日常运营至关重要。然而&#xff0c;在实际运维过程中&#xff0c;我们可能会遇到各种故障和问题。本文将针对MySQL运维中常见的故障进行深度排查&#xff0c;并提供高效的解决方案&#xff0c;帮助运维人员…