数据库01-慢查询优化

目录

MySQL优化

慢查询

如何定位慢查询?

如何分析慢查询?


MySQL优化

MySQL 优化是数据库管理和应用性能调优的一个重要方面。以下是一些常规性的 MySQL 优化经验和适用场景:

  1. 索引优化

    • 确保表的字段上有适当的索引,以加速查询。

    • 使用覆盖索引,以减少对表的实际访问次数。

    • 避免在列上使用通配符前缀,因为它会阻止使用索引。

  2. 查询优化

    • 尽量避免使用 SELECT *,只选择实际需要的列。

    • 使用合适的 WHERE 子句,以减少检索的行数。

    • 避免在查询中使用 SELECT DISTINCT,除非确实需要。

  3. 表设计优化

    • 使用适当的数据类型,避免使用过大的数据类型,以减小存储和提高检索效率。

    • 规范化数据库,以减少冗余数据,提高数据的一致性。

    • 使用分区表,将大表分割成更小的逻辑部分,加速查询。

  4. 缓存优化

    • 使用缓存,例如 MySQL Query Cache 或者外部缓存,减少对数据库的实际查询。

    • 使用合适的缓存策略,例如最近最少使用 (LRU) 策略。

  5. 配置调整

    • 调整 MySQL 的配置参数,包括缓冲池大小、连接数等,以适应你的应用需求。

    • 定期检查和优化表,使用 OPTIMIZE TABLE 命令。

  6. 分表分库

    • 当表变得非常大时,考虑将其分割成更小的表,甚至分散到不同的数据库中。

    • 使用分库分表可以提高查询性能和负载均衡。

  7. 合理使用事务

    • 使用合适的事务隔离级别,避免不必要的锁定和阻塞。

    • 考虑将一些读操作放在只读事务中,以提高并发性能。

  8. 定期备份和优化

    • 定期备份数据库,以防止数据丢失。

    • 定期执行 ANALYZE TABLECHECK TABLE,以修复可能存在的表问题。

  9. 监控和分析

    • 使用 MySQL 的性能监控工具,例如 Performance Schema 和 slow query log,以识别慢查询和性能问题。

    • 使用工具分析数据库的瓶颈,并采取相应的优化措施。

  10. 合理使用缓存

    • 对于读密集型应用,可以考虑使用缓存来存储频繁读取的数据,减轻数据库的压力。

慢查询

实际项目中,关于SQL优化的问题最常见的场景就是慢查询了。

慢查询的内部原因可以大致归纳为以下几个方面:

  • 聚合查询(优化子查询)

  • 多表查询(优化表数据结构设计)

  • 数据量过大(使用临时表)

  • 深度分页查询(优化分页设计方案)

慢查询的表象:

  • 页面加载过慢

  • 接口压测响应时间过长(超过1s)

  • 链路监控告警(sql执行时间超过2s)

如何定位慢查询?
  1. 开源工具

    • 调试工具:Arthas

    • 运维工具:Prometheus、Skywalking(公司内部可能会通过整合开源工具实现自定义的链路监控工具)

  2. Mysql自带慢查询日志

    在 MySQL 的配置文件中(通常是 my.cnfmy.ini),确保慢查询日志已经启用。配置如下:

    slow_query_log = 1
    slow_query_log_file = /path/to/slow-query.log
    long_query_time = 2 # 将查询时间的阈值设置为适当的值,单位是秒

    开启慢查询日志配置会影响MySQL性能,所以用于调试阶段,不会在生产环境配置。

  3. 使用 MySQL Workbench

    MySQL Workbench 提供了一个 Performance Dashboard,可以帮助你分析和诊断慢查询。在 MySQL Workbench 中,选择 "Performance",然后选择 "Dashboard"。你可以查看慢查询日志,并使用工具提供的图形化界面进行分析。

如何分析慢查询?

根据工具和日志我们可以得到慢SQL语句,那么如何分析呢?

1.拿来即用的EXPLAIN,分析执行计划

对于复杂的慢查询,你可以查看执行计划以了解 MySQL 是如何执行查询的。可以使用 EXPLAIN 关键字来获取查询计划。使用方式:explain + 慢查询语句。

explain select * from tb_hotel;

EXPLAIN SELECT * FROM tb_hotel WHERE id = "38609";

  • type 查看sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、 index、all (一般允许到range,如果是index和all就必然要优化了) system:查询系统中的表 const:根据主键查询 eq_ref:主键索引查询或唯一索引查询 ref:索引查询 range:范围查询 index:索引树扫描 all:全盘扫描

  • possible_keys、key、key_len确认语句中命中的索引是否存在失效的情况

  • Extra额外的优化建议,如果是“using index condition”,有优化索引的空间

2.检查索引

确保查询中使用的字段上有适当的索引。使用 SHOW INDEX FROM your_table 查看表的索引情况,确保索引被正确使用。

3.使用第三方查询优化工具

如 MySQL Workbench、Navicat 等,提供了可视化的查询分析功能,能够帮助你更直观地了解查询的性能特征。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何选择一个可靠的爬虫代理服务商?技术人员都需要知道

我身边从事大数据相关行业的朋友最近告诉我,自己新招的小伙伴工作效率很低,很多最基础的工具都不会选择,经常因为代理IP不可靠导致工作出错。 听完这些我才意识到,在这个大数据时代,还是有很多新手在进行网络爬取任务…

threejs(11)-精通着色器编程(难点)2

一、shader着色器编写高级图案 小日本国旗 precision lowp float; varying vec2 vUv; float strength step(0.5,distance(vUv,vec2(0.5))0.25) ; gl_FragColor vec4(strength,strength,strength,strength);绘制圆 precision lowp float; varying vec2 vUv; float strength 1…

Java中Enum枚举类型在项目中应用

1、什么是枚举类型? 1、枚举的本质就是穷举法,将可能会出现的情况,都列举出来,然后在列举的情况中调用。 2、枚举与class类似,也可以定义属性,构造方法,有getter和setter方法。 3、枚举类型对…

改进YOLOv8:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络

🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…

基于FPGA的PS端的Si5340的控制

1、功能 Si5340/41-D可以输出任意频率,当然有范围,100Hz1GHz。外部输入为24M或者4854M的XTAL,VCO在13500~14256Mhz之间,控制接口采用IIC或者SPI。 芯片架构图 2、IIC控制方式 3、直接上控制代码 使用米联客ZU3EG,将…

spider-node-初识

spider-node spider想解决的问题1:业务架构层面2:代码层面3:业务,产品,研发,测试之间4: 系统迭代成本高 spider-node 配置讲解spider-node启动 spider想解决的问题 1:业务架构层面 帮助研发团队…

C++学习笔记(一):安装VisualStudio和Vcpkg

VisualStudio安装 error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. #include <stdio.h>int main() {printf("hello"…

如何使用pngPackerGUI_V2.0,将png图片打包成plist的工具

pngPackerGUI_V2.0&#xff0c;此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。 具体的使用步骤如下&#xff1a; 1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.e…

iPhone或在2024开放第三方应用商店。

iPhone或开放第三方应用商店&#xff0c;可以说这是一个老生常谈的话题。对于像是iOS这样封闭的系统来说&#xff0c;此前传出苹果可能开放侧载消息的时候&#xff0c;又有谁能信&#xff0c;谁会信&#xff1f; 如果是按照苹果自身的意愿&#xff0c;这种事情自然是不可能发生…

Windows下Python及Anaconda的安装与设置、代码执行之保姆指南

学习Python编程需要安装基本的开发环境。 &#xff08;1&#xff09;python ——编译器&#xff1b;这个是任何语言都需要的&#xff1b;必需&#xff01; &#xff08;2&#xff09;Anaconda ——主要的辅助工具&#xff0c;号称是 Python‘OS&#xff1b;必需&#xff01; …

LeetCode | 234. 回文链表

LeetCode | 234. 回文链表 O链接 这里的解法是先找到中间结点然后再将中间节点后面的节点逆序一下然后再从头开始和从中间开始挨个比较如果中间开始的指针到走最后都相等&#xff0c;就返回true&#xff0c;否则返回false 代码如下&#xff1a; struct ListNode* reverseLis…

杂记杂记杂记

目录 Mybatis分页插件原理&#xff1f; ThreadLocal? 树形表的标记字段是什么&#xff1f;如何查询MySQL树形表&#xff1f; Mybatis的ResultType和ResultMap的区别&#xff1f; #{}和${}有什么区别&#xff1f; 系统如何处理异常&#xff1f; Mybatis分页插件原理&#…

PostMan授权认证使用

Authorization 对于很多应用&#xff0c;出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时&#xff0c;通常必须包含参数&#xff0c;以确保请求具有访问和返回所需数据…

Linux环境搭建和基础指令(一)

&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&…

论文笔记:SimiDTR: Deep Trajectory Recovery with Enhanced Trajectory Similarity

DASFFA 2023 1 intro 1.1 背景 由于设备和环境的限制&#xff08;设备故障&#xff0c;信号缺失&#xff09;&#xff0c;许多轨迹以低采样率记录&#xff0c;或者存在缺失的位置&#xff0c;称为不完整轨迹 恢复不完整轨迹的缺失空间-时间点并降低它们的不确定性是非常重要…

Unity中【UniTask异步流程】如何进行【步骤分段】、【步骤撤销】、【步骤跳转】、【取消异步任务】

一、UniTask和Task UniTask是Unity中的Task实现&#xff0c;Task是C#中实现异步操作的一个模块(类)。UniTask与Task有着同样的使用思路&#xff08;使用习惯&#xff0c;常用API等&#xff09;&#xff0c;可以说UniTask是借鉴Task而开发出来的。 二、需求的来源 以前有一个…

Maven内网开发使用离线仓库

Maven内网开发使用离线仓库 离线或者内网环境开发与外网不通&#xff0c;中央仓库连不上&#xff0c;使用 Maven 管理项目会遇到很多问题。 比如&#xff1a;依赖包缺失&#xff0c;内网的Nexus私服的包老旧&#xff0c;很久没有维护&#xff0c;项目无法运行打包&#xff0c;…

PDF Expert for mac(专业pdf编辑器)苹果电脑

PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具&#xff0c;为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注&#xff0c;还是专业需求下的编辑、转换&#xff0c;PDF Expert 都能满足您的各种需求。 首先&#xff0c;PDF…

UWB人员定位系统的原理与应用

uwb定位技术源码 uwb高精度定位系统源码 uwb人员定位系统基于什么原理&#xff1f; UWB人员定位系统基于超宽带(Ultra WideBand)技术进行位置定位。它利用超短脉冲信号&#xff0c;通过测量信号的到达时间差和信号强度等信息&#xff0c;实现对目标位置的定位。UWB技术具有高…

由于找不到dll无法执行代码的解决方法,深度解析5个dll修复方法

在使用计算机的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到dll无法执行代码”。这个错误通常发生在程序运行时&#xff0c;系统无法找到所需的动态链接库&#xff08;DLL&#xff09;文件。这个问题可能由多种原因引起&#xff0c;包括缺少…