慢查询SQL如何优化

news2024/11/19 23:24:39

一.什么是慢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)唯一性太差的字段不适合创建索引

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云云耀云服务器L实例评测|基于云耀云服务器在Docker上部署nginx服务

文章目录 1、服务介绍云耀云服务器Docker介绍Docker-Compse介绍 2、在云耀云服务器安装Docker3、通过Docker run命令运行nginx服务4、在云耀云服务器安装docker-compose5、通过docker-compose方式启动nginx服务 1、服务介绍 云耀云服务器 云耀云服务器(Hyper Elas…

ArcGIS 10.3安装教程!

软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地图生产全过程,为地图分析和处理提供了新的解决方…

java高级:动态代理

动态代理介绍、准备功能 这节课我们学习一个Java的高级技术叫做动态代理。首先我们认识一下代理长什么样? 假设现在有一个明星坤坤,它有唱歌和跳舞的本领,作为明星是要用唱歌和跳舞来赚钱的,但是每次做节目,唱歌的时…

多线程和并发编程(3)—AQS和ReentrantLock实现的互斥锁

一、管程模型—MESA模型 管程是什么? 管程就是指管理共享变量,以及对共享变量的相关操作。 在管程的发展史上,先后出现过三种不同的管程模型,分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA模型。 MESA模型…

每日一博 - 反向代理、API 网关、负载均衡

文章目录 概述图解 概述 反向代理、API网关和负载均衡是在网络和服务器架构中用于不同目的的重要组件,它们有不同的功能和应用场景。以下是它们之间的区别和联系: 反向代理(Reverse Proxy): 功能:反向代理…

Python 数据可视化:Seaborn 库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

u盘上面 安装 ubuntu 系统

u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22.04.3 LTS 桌面版 https://ubuntu.com/download/desktop 找到一个U盘 参考文章: 把 Ubuntu 装到U盘里随身携带,并同时支持 BIOS 和 UEFI 启动 https://www.luogu.com.cn/blog/GGAutomaton/portable-ubu…

【数据结构】串的定义;存储结构;基本操作的实现

欢迎光~临~^_^ 目录 知识树 1、串的定义 2、串的存储结构 2.1顺序存储 静态存储 动态存储 2.2链式存储 2.3串的堆分配存储表示 3、串的基本操作 3.1求子串 3.2比较操作 3.3定位操作 4、C语言实现串的基本操作 知识树 1、串的定义 串是由零个或多个字符组成的…

Oracle,高斯创建自增序列

某些时候,需要获取到一个自增值 然后点击左下 Apply 也可以通过SQL语句执行 dual在Oracle中是张虚拟表,通常用于执行这样的查询 Oracle中查询语句: select 序列名.nextval from dual 在高斯数据库中:查询是 select my_sequence.nextval 不需要加form xxx 也…

微信小程序项目开发Day1

没接触过,直接看视频学习: 千锋教育微信小程序开发制作前端教程,零基础轻松入门玩转微信小程序_哔哩哔哩_bilibili千锋教育微信小程序开发制作前端教程,零基础轻松入门玩转微信小程序共计56条视频,包括:学…

20230914java面经记录

1.mq消息重复消费 2.mq消息堆积 3.如何实现消费的幂等性(网站付款成功发货,使用mq做异步通知发货) 4.log,debug,warn,error怎么用 5.java基础 6.效率问题 ArrayList a,b;HashSet c,d ;a,b,c,d各自有10…

GDB之修改字符串的值(十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

ESP32主板-MoonESP32

产品简介 Moon-ESP32主板,一款以双核芯片ESP32-E为主芯片的主控板,支持WiFi和蓝牙双模通信,低功耗,板载LED指示灯,引出所有IO端口,并提供多个I2C端口、SPI端口、串行端口,方便连接,…

Claude 使用指南 | 可与GPT-4媲美的语言模型

本文全程干货,让你轻松使用上claude,这也是目前体验cluade的唯一途径!废话不多说,直接上教程,cluade的能力不逊于GPT4,号称是ChatGPT4.0最强竞品。相对Chatgpt来说,Claude不仅是完全免费的&…

Prometheus存储容量估算和Prometheus联邦机制

Prometheus最受诟病的一点就是单机存储不好扩展。 Prometheus存储容量估算 根据老师的经验,每秒接收 80 万个数据点,算是一个比较健康的上限,因而一开始也无需用一台配置特别高的机器,随着数据量的增长,以后再升级硬…

图扑可视化图表组件之股票数据分析应用

股市是市场经济的必然产物,在一个国家的金融领域之中有着举足轻重的地位。在过去,人们对于市场走势的把握主要依赖于经验和直觉,往往容易受到主观因素的影响,导致决策上出现偏差。如今,通过数据可视化呈现,…

java 单元测试Junit

所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,给开发者使用。这里介绍一种Junit测试框架。Junit是第三方公司开源出来的&#xff0…

JavaSE、JavaEE与Spring的概念和异同点剖析以及规范13 个分析

JavaSE、JavaEE与Spring的概念和异同点剖析以及规范13 个分析 目录概述需求: 设计思路实现思路分析1.什么是JavaSE2.是JavaEE3.什么是Spring 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&…

奇怪的3389端口~腾讯/百度云服务器镜像有问题?

新安装的腾讯云服务器,系统win2019,打开微软官方的TCPVIEW软件,只要稍等一会儿,就能看到来自国外的3389连接,处于established状态。 系统是新安装的,密码也是刚刚重置的复杂密码, 除了TCPVIEW没…

【CVPR2021】MVDNet论文阅读分析与总结

Challenge: 现有的目标检测器主要融合激光雷达和相机,通常提供丰富和冗余的视觉信息 利用最先进的成像雷达,其分辨率比RadarNet和LiRaNet中使用的分辨率要细得多,提出了一种有效的深度后期融合方法来结合雷达和激光雷达信号。 MV…