热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

如何优化mysql慢查询语句_MySQL慢查询语句的优化

一、开启并获取慢查询(1)开启慢查询showvariableslike‘%query%’;通过修改配置文件将slow_query_log设置为on,开启慢查询日志通过

一、开启并获取慢查询

(1)开启慢查询

show variables like ‘%query%’;

通过修改配置文件将 slow_query_log 设置为on,开启慢查询日志

通过设置 long_query_time 设置合适的慢查询时间(单位为秒)

通过设置 slow_query_log_file 设置慢查询日志的文件位置

(2)获取慢查询语句

两种方式:

一种直接到上面设置的慢查询日志中逐条查找汇总;

另一种方式是使用 mysqldumpslow 工具,该工具是 mysql 官方标配

# 找到你的 mysqldumpslow 工具所在位置

find/-name mysqldumpslow

# 进入工具所在目录

# 执行打印慢sql

mysqldumpslow

202c7e1a13f228133dc1fb0049c6635d.png

二、具体优化

通过 explain 分析 sql 的执行情况,主要关注type 、possible_keys、 key,rows 、Extra 这四个信息

注:先运行看看是否真的很慢,注意设置SQL_NO_CACHE

1、首先看扫描行数rows

如果扫描的行数和得到的结果集行数相差非常多,则说明没有建立合适的索引,这时应该为where条件下的列或order by 条件下的列创建索引

2、看possible_keys 和 keys

possible_keys 指的是mysql在执行时可能使用的索引,key 表示执行时实际使用的索引

如果 possible_keys 比 key 多,应该先看看 sql 是否符合最左匹配原则,让索引尽可能多的用上

3、看额外信息 Extra

根据Extra 具体分析

4、看type

type 表达了sql执行时的访问类型(MySQL决定如何查找表中的行)

到了这一步,实际上该建的索引都已经建好了,剩下的就是通过调整sql的编写方式,使其达到更优质的查询类型

三、案例

注:因为每个系统的数据量、数据表结构、数据库的配置等信息都不一样,因此适合别人系统的未必一定适合自己系统,不过我们可以参考别人的案例来反省自己的慢sql。看一遍,一定会有所收获的。



推荐阅读
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在使用达梦数据库时,管理员可能会遇到连接频繁中断或特定SQL语句语法错误的问题。这些问题通常源于开发人员在创建对象时的不规范操作。为了解决这些问题,建议对数据库配置进行优化,并确保所有SQL语句符合达梦数据库的标准语法。此外,定期检查和维护数据库连接参数,以及对异常日志进行详细分析,也有助于及时发现并解决问题。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
author-avatar
相思和怀恋_811_372
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有