iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >详细聊聊MySQL中慢SQL优化的方向
  • 240
分享到

详细聊聊MySQL中慢SQL优化的方向

2024-04-02 19:04:59 240人浏览 泡泡鱼
摘要

目录前言sql语句优化记录慢查询SQL如何修改配置查看慢查询日志查看SQL执行计划如何使用SQL编写优化为何要对慢SQL进行治理总结前言 影响一个系统的运行速度的原因有很多,是多方面

前言

影响一个系统的运行速度的原因有很多,是多方面的,甚至可能是偶然性的,或前端,或后端,或数据库,或中间件,或服务器,或网络等等等等,真正的去定位一个问题需要对系统有一定的认知,可以根据自身的判断去缩小问题范围。

今天不说其他的优化,单独把数据库的优化拿出来说几个优化方向。

跟系统的优化方向一样,数据库的优化,同样也是多方面的,其中涵盖着SQL语句的执行情况,数据库自身的情况等等,下面我们就来说一下Mysql数据库中的慢SQL语句优化方向,希望也能给到大家一些优化思路。

SQL语句优化

SQL语句的优化,有很多文章说起,也有很多在SQL编写上的指导;但是那种只能支持基本开发,如果要排查问题,那就不能单单的只是停留在SQL编写上了,而是有一个整体的发现问题的流程。

本次优化方向,大概分为发现慢查询SQL,查看并解析SQL执行计划,SQL编写上的优化,索引优化等几个方面。

记录慢查询SQL

mysql中记录慢查询SQL是可以利用MySQL内部配置来实现的,这个配置就是slow_query_log配置。

可利用show variables like '%query%';查询出以下三个相关结果。


long_query_time     | 1.00000
slow_query_log      | off
slow_query_log_file | /data/mysql/mysql_slow.log

解释一下这三个参数,

  • long_query_time:如何区分SQL查询是慢查询,就要规定一个查询时间,超过这个时间的就归类于慢查询,此参数就是来设置时间范围的;以秒为单位,可以设置小数。
  • slow_query_log:此参数为是否开启记录慢查询SQL的开关,两个选择,on或者off,默认为off,所以在这里我们就知道如果要开启慢查询SQL记录,需要手动设置开启。
  • slow_query_log_file:慢查询SQL日志的文件路径,可以自行指定。

如何修改配置

有两个方法。

其一:修改my.ini或者是my.cnf文件,将此三项配置进行一个配置。

其二:直接在sqlplus中,使用set语法来修改参数,但是重启mysql数据库后就会失效,sql如下:


set global long_query_time = 10;

set global slow_query_log = on;

set global slow_query_log_file = /data/mysql/mysql_slow.log;

因为这个方法会重启失效,所以还是建议使用第一种方式。

查看慢查询日志

如何查询慢查询日志呢,如果量很小的情况下,其实是不需要使用工具的,完全可以直接打开即可。

如果量比较大,就需要mysqldumpslow工具查询会更方便。

mysqldumpslow是和mysqld相同类型的执行脚本,可以直接在命令行中执行,具体的使用方法如下:

mysqldumpslow参数:

-s,是order的顺序
-----al 平均定时间
-----ar 平均返回记录时间
-----at 平均查询时间(默认)
-----c 计数
-----l 锁定时间
-----r 返回记录
-----t 查询时间

-t,top,即为返回前面多少条的数据
-g,自定义正则表达式

举个例子,如下:

mysqldumpslow -s r -t 5 /data/mysql/mysql_slow.log

查询出返回记录集最多的5个慢查询SQL。

更多用法之后我建个测试库单独写篇文章细说一下。

查看SQL执行计划

查看执行计划关键词:EXPLaiN

如何使用

就是直接执行 EXPLAIN SELECT * FROM TABLE_NAME;

这个一开始我是打算简单说一下的,后来发现篇幅太长了,这个留待下篇文章里,感谢理解。

SQL编写优化

SQL的编写优化就很多了,我这里也整理出了一些,请大家自行查漏补缺。

  • 查询语句无论是使用哪种判断条件 等于、小于、大于, where左侧的条件查询字段不要使用函数或者表达式。
  • 不要直接使用select *,而应该使用具体需要查询的表字段;select * 使用的是全表扫描,不会走索引的。
  • 避免在 WHERE 字句中对字段进行 NULL 判断。
  • 避免在 WHERE 中使用 != 或 <> 操作符。
  • 使 用 BETWEEN AND 替代 IN。
  • 为常用搜索条件创建索引
  • 选择正确的存储引擎, InnoDB 、MyISAM 、MEMORY 等,不同的场景下使用不同的存储引擎会有更好的效果。
  • 使用 like %123% 不会走索引, 而使用 like 123% 会走索引。非常重要!!!
  • 选择合适的字段类型。
  • 设计字段时,要尽量使用NOT NULL。

为何要对慢SQL进行治理

从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短。假设总资源是100,有一条慢SQL占用了30的资源共计1分钟。那么在这1分钟时间内,其他SQL能够分配的资源总量就是70,如此循环,当资源分配完的时候,所有新的SQL执行将会排队等待。

从应用的角度看:SQL执行时间长意味着等待,在OLTP应用当中,用户的体验较差

治理的优先级上

  • master数据库->slave数据库
    • 目前数据库基本上都是读写分离架构,读在从库(slave)上执行,写在主库(master)上执行。
    • 由于从库的数据都是从主库上复制过去的,主库等待较多的,会加大与从库的复制时延。
  • 执行次数多的SQL优先治理
  • 如果有一类SQL高并发集中访问某一张表,应当优先治理。

总结

这里面远远还没有讲全,还有很多种编写规则,同时还有索引的建立并没有聊,留给大家一些自己看书的时间,希望大家有所进步。

到此这篇关于MySQL中慢SQL优化方向的文章就介绍到这了,更多相关MySQL慢SQL优化方向内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 详细聊聊MySQL中慢SQL优化的方向

本文链接: https://www.lsjlt.com/news/133898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详细聊聊MySQL中慢SQL优化的方向
    目录前言SQL语句优化记录慢查询SQL如何修改配置查看慢查询日志查看SQL执行计划如何使用SQL编写优化为何要对慢SQL进行治理总结前言 影响一个系统的运行速度的原因有很多,是多方面...
    99+
    2024-04-02
  • 详细聊聊MySQL中的LIMIT语句
    目录问题 server层和存储引擎层 那LIMIT是什么鬼? 怎么办? 吐个槽 最近有多个小伙伴在答疑群里问了小孩子关于LIMIT的一个问题,下边我来大致描述一下这个问题。 问题 ...
    99+
    2024-04-02
  • 详细聊聊sql中exists和not exists用法
    在SQL中,EXISTS和NOT EXISTS是用于判断子查询中是否存在或不存在记录的条件运算符。1. EXISTS用法:EXIST...
    99+
    2023-08-08
    SQL
  • 详细聊聊sql中exists和not exists用法
    目录exists:exists 和in 的区别not exists详细介绍:附案例分析总结之所以要说这个问题,是因为项目中用到了not exists,但两者写的语句只有一点差别,结果...
    99+
    2024-04-02
  • 详细聊聊Vue.js中的MVVM
    目录MVVM的理解MVVM的原理脏检查机制:数据劫持相同点实现MVVM总结MVVM的理解 MVVM拆开来即为Model-View-ViewModel,有View,ViewModel...
    99+
    2024-04-02
  • MySQL慢sql优化思路详细讲解
    目录1、开启mysql慢查询1.1、查看慢查询相关配置1.2、查询慢查询sql耗时临界点1.3、开启Mysql慢查询2、explain查看SQL执行计划2.1、Select_type2.2、Type2.3、Po...
    99+
    2023-01-05
    mysql慢sql优化五个原则 mysql 慢sql 慢SQL优化
  • 详细聊聊Vue中的options选项
    目录Vue中的options选项options的五类属性入门属性使用vue文件添加组件computed(计算属性)用途缓存示例:watch(监听)用途何为变化deep: true是干...
    99+
    2024-04-02
  • 详细聊聊Mybatis中万能的Map
    目录万能的Mapdemomap 实现add usermap 实现通过id查询多个参数可以使用Map进行传参总结万能的Map 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我...
    99+
    2024-04-02
  • 详细聊聊golang中函数的用法
    随着计算机技术的不断发展,编程语言也在不断更新换代,其中Golang是近年来非常热门的一种编程语言,它的高效、安全、易用受到了很多开发者的喜爱。在Golang中,函数是一种非常重要的编程元素,本文将详细介绍Golang函数的用法。一、函数的...
    99+
    2023-05-14
  • 详细聊聊前端Vue.js开发中的坑
    Vue.js是一个非常流行的JavaScript框架,能够帮助开发者快速构建高性能和可维护的Web应用程序。Vue.js框架在使用过程中,有时候会遇到一些“坑”,所谓“坑”,就是一些代码或设计上的难点或者问题。下面我将详细介绍一下前端Vue...
    99+
    2023-05-14
  • 详细聊聊C#的并发机制优秀在哪
    目录前言一行没用的代码却提高了效率?​ 看似没用的Invoke到底有什么用​深度解读,为何要加两把锁总结前言 笔者上次用C#写.Net代码差不多还是10多年以前,由于当时J...
    99+
    2024-04-02
  • 一起详细聊聊C#中的Visitor模式
    目录写在前面模式演进举个例子使用了Tpye-Switch的版本尝试使用重载的版本单分派与双分派Visitor模式总结写在前面 Visitor模式在日常工作中出场比较少,如果统计大家不...
    99+
    2024-04-02
  • 详细聊聊TypeScript中unknown与any的区别
    目录前言1. unknown vs any2. unknown 和 any 的心智模式3.总结总结前言 我们知道 any 类型的变量可以被赋给任何值。 let myVar: a...
    99+
    2024-04-02
  • 详细聊一聊algorithm中的排序算法
    目录前言一、algorithm是什么?二、有哪些排序算法?sortrandom_shufflemergereverse总结前言 雨下不停,爱意难眠,说一下algorithm中的几个排...
    99+
    2024-04-02
  • 详细聊聊vue中组件的props属性
    目录问题一:那props具体是怎么使用呢?原理又是什么呢?往下看问题二:那如果我们想给年龄加1岁,怎么实现?问题三:对于年龄这一类型,我们最希望拿到的是什么数据类型?问题四:可以限制...
    99+
    2024-04-02
  • 详细聊聊Vue中的MVVM模式原理
    目录1. MVVM模式2. Vue响应式3. Vue监听对象3.1 监听普通对象3.2 监听复杂对象(深度监听)4. Vue监听数组5. 使用 Object.defineProper...
    99+
    2023-03-03
    vue.js mvvm vue.js教程 vue mvvm模式
  • 详细聊聊SpringBoot中动态切换数据源的方法
    其实这个表示有点不太对,应该是 Druid 动态切换数据源的方法,只是应用在了 springboot 框架中,准备代码准备了半天,之前在一次数据库迁移中使用了,发现 Druid 还是...
    99+
    2024-04-02
  • MySQL定位并优化慢查询sql的详细实例
    目录1.如何定位并优化慢查询sql   a.根据慢日志定位慢查询sqlb.使用explain等工具分析sqlc.修改sql或者尽量让sql走索引2.联合索引的最左匹配原则的成因简单说...
    99+
    2024-04-02
  • 详细聊一聊java中封装的那点事
    目录什么是封装封装拓展之包包的概念 什么是包访问权限什么是静态成员总结一下: 什么是封装 什么是封装呢?我们先来看一段代码 class Student { ...
    99+
    2024-04-02
  • 详细聊聊关于sql注入的一些零散知识点
    目录零、本文涉及知识点一、sqlmap写一句马的过程(-- os-shell)1.1 简述过程1.2 一个小问题二、堆叠注入:2.1 什么是堆叠注入2.2 如何判断存在堆叠注入?2....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作