慢查询SQL如何优化

2023-09-14 10:51:14

一.什么是慢SQL?

慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录,它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s.

二.查看慢SQL是否开启

我么可以使用show variables like '%slow_query_log%'来查看慢查询日志是否开启。

 当slow_query_log   value值为on时,表示慢查询日志功能开启。

慢查询日志如何开启

开启慢查询日志,可以使用如下 MySQL 命令:

mysql> set global slow_query_log=1

但是这种方式只对当前数据库生效,MySQL 一旦重启也会失效,如果要永久生效,就必须修改 MySQL 的配置文件 my.cnf,配置如下:

slow_query_log =1

slow_query_log_file=/tmp/mysql_slow.log

三.SQL性能下降的原因

1.等待时间长

锁表导致查询一直处于等待的状态

2.执行时间长

    (1)索引失效

     (2)查询语句写的差

    (3)关联太多的join

       (4)服务器调优以及各个参数的设置

四.慢查询优化思路:

1.优先选择优化高并发执行的sql,因为高并发的sql产生的问题更加严重

2.定位优化对象的性能瓶颈

(1)IO(数据访问消耗了太多的时间,查看是否使用了索引)

(2)CPU(数据运算花费了太多时间,数据的运算分组,排序是不是有问题)

 (3)网络带宽(加大网络带宽)

3.明确优化目标

4.explain执行计划入手

explain能告诉我们当前sql的执行状态

其中最重要的就是 type 字段,type 值类型如下:

  • all — 扫描全表数据
  • index — 遍历索引
  • range — 索引范围查找
  • index_subquery — 在子查询中使用 ref
  • unique_subquery — 在子查询中使用 eq_ref
  • ref_or_null — 对 null 进行索引的优化的 ref
  • fulltext — 使用全文索引
  • ref — 使用非唯一索引查找数据
  • eq_ref — 在 join 查询中使用主键或唯一索引关联
  • const — 将一个主键放置到 where 后面作为条件查询, MySQL 优化器就能把这次查询优化转化为一个常量,如何转化以及何时转化,这个取决于优化器,这个比 eq_ref 效率高一点。

当type的值为all的时候,说明我们索引没走,走的是全表扫描

另外通过其他的一些字段我们可以了解:

(1)表的读取顺序

(2)数据读取操作的操作类型

(3)那些索引可以被使用

(4)那些索引真正被使用

 (5)表的直接引用

 (6)每张表有多少行被优化器查询了

5.永远用小结果驱动大的结果集

 用小表驱动大表

这里我们举个例子:

如果小的循环在外层,那么连接数据库只需要10次,如果大的循环在外边,那么我们连接数据库就需要100次,这样就浪费了资源。

6.尽可能在索引中完成排序

  当我们需要对查询的语句order by的时候,如果order by后面的字段如果在索引列中,因为索引本来就是排好序的,所以速度很快,没有索引的话,就需要从表中拿数据,在内存中进行排序,如果内存空间不够还会发生落盘操作

7.只获取自己需要的列

在进行sql语句查询的时候,我们尽量避免直接select*from 表名,我们需要啥列则获取啥列

8.只使用最有效的过滤条件

并不是where 后面的条件越多越好

9.尽量避免复杂的join连接

10.合理设计并使用索引

如何判定是否需要创建索引?

(1)如果查询的某些字段较为频繁,我们应该为他们设计索引

 (2)更新很频繁的字段不适合创建索引(索引的字段被更新,索引数据也需要更新)

  (3)不会出现在where子句的字段不应该创建索引

 (4)唯一性太差的字段不适合创建索引

更多推荐

掌握这些算法,让你的编程之路更顺畅——重要算法解析

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。这些算法通常被广泛应用于日常编程工作中,是提升编程效率和解决实际问题的重要工具。本文将介绍几种十分重要的“必抓!”算法,希望能对广大程序员朋友们提供一些帮助。程序员的必抓算法:一:引言在编程的世界里,算法是解决问

动手学深度学习_个人笔记01_李沐(更新中......)

序言神经网络——本书中关注的DL模型的前身,被认为是过时的工具。深度学习在近几年推动了CV、NLP和ASR等领域的快速发展。关于本书让DL平易近人,教会概念、背景和代码。一种结合了代码、数学和HTML的媒介测试深度学习(DL)的潜力带来了独特的挑战,因为任何一个应用都会将不同的学科结合在一起。应用DL需要同时了解:(1

记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

直接问AI它们之间的区别的话,是这么回答的浏览器缩放和移动端缩放是两种不同的概念,它们涉及到用户在不同设备上改变网页内容大小的方式。以下是它们的主要区别:浏览器缩放(DesktopBrowserZoom):浏览器缩放是指在桌面计算机浏览器上,用户通过调整浏览器窗口的缩放级别来改变网页内容的大小。用户可以使用浏览器的缩放

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)数据源平台:金蝶云星空金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。K/3Cloud支持的协同应用

Redis 有序集合操作实战(全)

目录ZADD加入有序集ZCARD取成员数量ZCOUNT计算区间成员数量ZINCRBY运算ZRANGE取区间成员(升序)ZRANGEBYSCORE按分值排序取成员ZRANK取成员排名ZREM移除成员ZREMRANGEBYRANK按位置区间批量移除ZREMRANGEBYSCORE按分值区间移除ZREVRANGE取区间成员(

[maven] maven 简述及使用 maven 管理单个项目

maven简述及使用maven管理单个项目简单的说就是maven是一个项目管理工具,同时也是一个依赖管理工具。使用maven生成的项目结构大致如下:project|-src/main/java|-src/main/resources|-src/test/java|-src/test/resources本篇笔记带一些核心

华为云云耀云服务器L实例评测|docker私有仓库部署手册

【软件安装版本】【集群安装(是)(否)】版本号文档编写文档审核创建日期修改日期1.0jzgjzg2023.9.13一.部署规划与架构1.规划:(集群:网络规划,服务器规划)环境:华为云云耀云服务器L实例,非集群方式网络:公网ipv4地址;内网:192.168.0.147网络需要配置安全组使用环境:内网,不适合生产环境使

如何导出数据库数据字典

1、随便找一个工程项目,在项目build.gradle配置文件添加以下依赖compilegroup:'cn.smallbun.screw',name:'screw-core',version:'1.0.5'2、刷新下载依赖3、将以下代码拷贝到工程任意Java目录ScrewDemo.javapackagecom.xxx;

区块链的使用场景和优势

区块链技术是一种基于分布式数据库、密码学和去中心化结构的新型计算模式,其具有以下应用场景和优势:应用场景:1.数字货币:比特币、以太坊等数字货币系统能够实现去中心化、快速高效的支付功能。2.数字身份认证:基于区块链的数字身份认证系统可以提高身份认证的安全性,同时保护隐私。3.供应链管理:区块链技术可以实现对物流、采购、

为什么需要工业物联网 (IIoT)?如何实施?

制造业数字化、网络化、智能化已经是大势所趋。这些特性都在改变着制造业的格局,进而影响着我们生活和工作的方式。工业物联网作为一种利用传感器、云计算、大数据和人工智能等技术,实现了工业设备、流程和服务的智能化,正逐渐成为制造业的发展趋势。本文将进一步探讨工业物联网的特征、工业物联网带来的好处以及如何实施工业物联网。什么是工

陕西省中级工程师职称评审

一.评审范围全省范围具有合法生产,经营手续的中小企业局和非公有制经济从事工程师工作专业技术人员和高技能人员,均可申报当年达到法定退休或已办退休的人员,不大参加职称评审。评审专业领域;机械,材料,冶金,电气,电子,信息通信,仪器仪表,能源动力,控制工程,计算机,自动化,人工智能,广播电视,建设,土木,水利,测绘,化工,地

热文推荐