如何分析和优化慢sql语句

前言

sql查询速度比较慢容易成为性能瓶颈,这时我们可以优化我们的sql语句或数据库表

一般sql语句执行很慢的种类分为:

1.聚合查询

2.多表查询

3.表数据量过大查询

4.深度分页查询

这四种的前三种都可以通过优化sql语句来优化sql查询速度

正文

聚合查询

我们可以通过尝试新增一个临时表来解决

多表查询

可以试着优化sql语句的结构

表数据量过大查询

可以添加索引

出现回表查询

在业务允许的情况下只查询当前索引表中包含的字段(覆盖索引查询)来防止查询多个索引结构

超大索引查询

比如将

select * from tab limit 9999999,10;

优化为

select * from tab t,
    (select id from tab order by id limit 9999999,10) a
where t.id=a.id;

 这样先通过子查询拿到对应的id表a(覆盖索引查询),然后在通过主键查询,这样速度就会快一些

通过sql执行计划来分析并优化sql语句

我们可以给普通的sql语句前面加上desc来分析此sql语句的执行计划

执行结果如下:

possible_keys

表示当前sql中可能会使用到的索引(可能多个)

如果查询比较慢,且此值没有关联到索引,可以通过增加索引来优化查询速度

key

表示当前sql实际命中的索引

如果 possible_keys 不为 null 而 key 为 null, 则说明未命中索引,这时可以优化sql语句使其命中索引

key_len

表示索引占用的大小

key_len 和 key 可以看出是否命中了索引

Extra

额外的优化建议

type

表示这条sql的连接的类型

性能由好到差(性能好一般要在range及以上):

    NULL: 表示查询的时候没有使用到表(项目中一般不会使用)

    system: 查询mysql系统中自带的表(项目中一般不会使用)

    const: 根据主键索引查询时(只会查询一条数据,性能好)

    eq_ref: 根据主键索引或唯一索引查询时(只会查询一条数据)

    ref: 使用了索引查询(可能查询出多条数据)

    range: 使用了索引,但是是范围查询

    index: 使用索引树扫描(全索引查询)

    all: 全盘扫描(效率最低)

对Kotlin或KMP感兴趣的同学可以进Q群 101786950

如果这篇文章对您有帮助的话

可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)

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

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

相关文章

洗地机什么牌子比较好?4款洗地机品牌型号深度推荐

随着科技的不断发展,清洁工具也在不断进化。手持洗地机作为一种新型的清洁工具,因其便捷、高效的特点受到了消费者的青睐。然而,市场上的洗地机品牌众多,消费者在选择时常常感到困惑。那么,哪些洗地机品牌在口碑上表现…

FinalShell 安装 及使用教程

一 简介: FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件,同时支持 Windows,macOS,Linux,它不单单是一个 SSH 工具,完整的说法应该叫一体化的的服务器,网络管理软件,在很…

记录一个Maxwell采集MySQL数据时报安全证书时间不通过的问题

【背景描述】 我的zk,kafka和Maxwell都正常启动了 此时我需要用Maxwell将MySQL的一张表user_info将其全量同步到kafka当中时发生报错,命令如下: [atguiguhadoop102 datas]$ /opt/module/maxwell/bin/maxwell-bootstrap --database gmall --…

3、Flink执行模式(流/批)详解(上)

0、批模式和流模式对比表 类别流模式批模式任务调度所有任务需要持续运行,消耗资源大任务可以按Shuffle分阶段执行,消耗资源小Shuffle记录会被流水线式的持续发送到下游任务,在网络上进行缓冲可以保存Shuffle分阶段执行的中间结果State Back…

Linux的UDEV机制

udev 机制引入: 手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb c. dmeg能查看到手机接入的信息,但是输入adb devices会出现提醒 dinsufficient permissions for …

Instagram运营5大技巧,防封攻略

对于企业和个人而言,运营Instagram已成为吸引流量、增加曝光、提升品牌知名度的重要手段。然而,许多人在初次尝试Ins运营时可能会遇到困难,不知道从何入手。本文将为您分享五大技巧,帮助您更好地运营Instagram,吸引更多…

【文章转载】Lance Martin的关于RAG的笔记

转载自微博黄建同学 从头开始学习 RAG,看Lance Martin的这篇笔记就行了,包含了十几篇论文和开源实现! —— 这是一组简短的(5-10 分钟视频)和笔记,解释了我最喜欢的十几篇 RAG 论文。我自己尝试实现每个想…

迪拜之行回顾:CESS 的 DePIN 创新之旅

迪拜最近是一个关键热词,成为了一系列 Web3 和加密活动的中心,吸引了行业领导者、创新者和爱好者,探索区块链和去中心化技术的最新发展。从 4 月中旬,一系列行业会议和活动陆续举行,吸引了一众与会者。然而暴雨积水又成…

vue集成百度地图vue-baidu-map

文章目录 vue集成百度地图vue-baidu-map1. Vue Baidu Map文档地址2. 设置npm数据源3. 安装vue-baidu-map4. 配置vue-baidu-map4.1 main.js全局注册4.2 vue页面设置4.3 效果 vue集成百度地图vue-baidu-map 1. Vue Baidu Map文档地址 https://dafrok.github.io/vue-baidu-map/#…

从0到1—POC编写基础篇(四)

接着上一篇 cprint 模块 Python内置的 print 函数可以输出任何类型的数据,但有时候输出的内容不够简洁、美观,难以直观地了解程序运行状态。cprint 库就是为了解决这个问题而生的,它可以让Python输出更简洁、更美观。 cprint 库是一个基于装…

ubuntu20.04开机运行java的sh脚本

用到了 rc.local 1、修改 /usr/lib/systemd/system/rc-local.service 在最下面添加 [Install] WantedBymulti-user.target 2、 系统没有 rc.local,需要手动创建 cd /etc vi rc.local在里面写入 /opt/start.sh chmod x /etc/rc.local # 添加可执行权限 chmod x…

基于51单片机空气质量监测报警仿真LCD1602液晶显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机空气质量监测报警仿真LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计:4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 基于51单片机空气质量监测报警仿真LCD显示( proteus仿真程序设计报告原理图讲解视频…

前端CSS基础10(浮动)

前端CSS基础10(浮动) 浮动元素浮动后的特点浮动后的特点浮动后的影响及解决 浮动布局小练习 浮动 CSS中的浮动是一种布局技术,常用于实现元素的排列和定位。通过使用float属性,可以让元素在页面中左浮动或右浮动,使得…

ubuntu18.04系统编译openwrt21.02.3

搭建ubuntu18.04环境 使用虚拟机安装ubuntu环境网上教程很多,这里不做赘述,主要是安装一些我们在编译openwrt时可能会用到的一些工具环境 sudo apt-get update sudo apt instll libncurses-dev gawk sudo apt-get install build-essential libncurses5…

pytest数据驱动DDT(数据库/execl/yaml)

常见的DDT技术 数据结构: 列表、字典、json串 文件: txt、csv、excel 数据库: 数据库链接 数据库提取 参数化: pytest.mark.parametrize() pytest.fixture() …

2023年图灵奖揭晓,Avi Wigderson成为双冠王

文章目录 Avi Wigderson双冠王个人简介约翰纳什致敬 Avi Wigderson 2024年4月10日,ACM宣布Avi Wigderson为2023年ACM A.M.图灵奖获得者,以表彰他对计算理论的基础性贡献,包括帮助我们重新理解随机性在计算中的作用,以及他在理论计…

第一届长城杯半决赛wp和AWD笔记

目录 AWD 渗透 cfs 单节点1 AWD笔记 AWD工具 文件比较工具 Web漏洞扫描工具 waf工具 代码审计工具 批量网站备份文件泄露扫描工具 cms通杀漏洞的利用 通杀脚本和批量提交flag脚本 防御流程 攻击流程 注意 AWD 解题思路] 首先就是fscan快速扫描对应C段&#xf…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | LCD Number的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | LCD Number的使用及说明 文章编号&#xf…

贪吃蛇的C语言实现

目录 一、游戏流程设计 二、游戏实现原理 2.1如何创建并管理数据 2.2如何实现蛇身移动 2.3如何实现食物随机放置 2.4如何检测按键与调整光标位置 三、源代码 3.1 test.c 3.2 snake.h 3.3 snake.c 一、游戏流程设计 GameStart WelcomeToGame:打印欢迎界面…

架构师系列-消息中间件(九)- RocketMQ 进阶(三)-消费端消息保障

5.2 消费端保障 5.2.1 注意幂等性 应用程序在使用RocketMQ进行消息消费时必须支持幂等消费,即同一个消息被消费多次和消费一次的结果一样,这一点在使用RoketMQ或者分析RocketMQ源代码之前再怎么强调也不为过。 “至少一次送达”的消息交付策略&#xff…