如何分析和优化慢sql语句

news/2024/5/6 20:19:27

前言

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

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

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


http://www.mrgr.cn/p/36678866

相关文章

初始C++

1. C关键字(C98) C总计63个关键字, C语言32个关键字 ps:下面我们只是看一下C有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再 细讲。 2. 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,…

ps/lr如何为一个型号相机的raw使用其他相机的预设

首先单独下载camera raw,进到C:\ProgramData\Adobe\CameraRaw\CameraProfiles\Camera中获取想要的相机型号的预设dcp文件 去 https://liquidtelecom.dl.sourceforge.net/project/dcptool/dcptool/dcpTool V1.11.0/dcpTool_1_11_0.zip?viasf=1 下载dcp编译工具dcpTool cd C:\U…

Oracle 21 C 安装详细操作手册,并配置客户端连接

Oracle 21 C 安装详细操作手册 Win 11 Oracle 21C 下载: Database Software Downloads | Oracle 中国 云盘共享 链接:https://pan.baidu.com/s/12XCilnFYyLFnSVoU_ShaSA 提取码:nfwc Oracle 21C 配置与登陆: 开始菜单 NetMa…

一文速览Llama 3及其微调:如何通过paper-review数据集微调Llama3 8B

前言 4.19日凌晨正准备睡觉时,突然审稿项目组的文弱同学说:Meta发布Llama 3系列大语言模型了 一查,还真是 本文以大模型开发者的视角,基于Meta官方博客的介绍:Introducing Meta Llama 3: The most capable openly a…

记录收集博客园美化代码

记录了一些好看实用的博客园美化主题🌃 初始微改版预览页面点击查看代码 /* 全局字体设定 */ #cnblogs_post_body {font-family: Roboto, sans-serif;color: #333; /* 增强字体颜色对比度,提高可读性 */ }/* 一级标题 */ #cnblogs_post_body h1 {font-size: 30px;font-weigh…

spring-boot学习记录

💭 记录spring-boot学习过程🕐 学习参考网站 1天搞定SpringBoot+Vue全栈开发-bilibili🕐 准备 🕑 项目热部署 视频中的idea版本较老,热部署实现参考IDEA2021 热部署-知乎 🕑 修改默认端口 在 src/main/resources/application.properties 文件中添加 server.port=80�…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库,需要邮箱注册&#xff…

C语言结课实战项目_贪吃蛇小游戏

✨✨所属专栏:C语言✨✨ ✨✨作者主页:嶔某✨✨ 游戏源代码链接:function/贪吃蛇 钦某/c-language-learning - 码云 - 开源中国 (gitee.com) 最终实现效果: 实现基本的功能: void set_pos(short x, short y);//定位光…

需求 分析

需求分析的任务 需求分析的任务 1、需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”这个问题。 2、确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。 3、系统分析员应该写出软件需求…

世强硬创获昕感科技授权代理,SiC MOSFET实现超低导通电阻

近日,世强先进(深圳)科技股份有限公司(下称“世强先进”)获北京昕感科技有限责任公司(下称“昕感科技”,英文名:NEXIC)授权代理,为光伏、储能、电网、新能源汽…

一文搞懂“对账系统”

对于每天都需要对账的生意来讲,如果遇上大的额数,就会出现困难,为了提升核对效率以及准确性,对账系统有一定的改变是避免不了的,下面是笔者整理的关于“对账系统”的内容分享,想要了解相关内容的可以接着继续往下了解了解哦!账目核算是财务工作的必要部分,随着线上交易…

UE4纯C++实现游戏快捷栏之将快捷栏注册到玩家状态

我们有了UI有了物品信息,接下来我们便需要给每一个玩家绑定一个快捷栏了,我们分以下几部分来实现我们玩家的快捷栏。1.Types.h struct ShortcutContainer:我们定义快捷栏的单个容器结构体,其内部存储玩家所引用的快捷栏的单个格子的信息数据基础的,我们将在结构体中保存{单…

个人博客系统的设计与实现

https://download.csdn.net/download/liuhaikang/89222885http://点击下载源码和论文 本 科 毕 业 设 计(论文) 题 目:个人博客系统的设计与实现 专题题目: 本 科 毕 业 设 计(论文)任 务 书 题 …

buuctf-pwn-1.test_your_nc

简单题,知道nc怎么用就好 基本用法 nc 地址 端口号 地址可以是一个域名,也可以是ip地址,地址和端口中间不是:,而是一个空格 连接上之后直接ls就看到flag文件了,cat flag查看flag文件的内容获取flag 注意windows上的nc需要下载,linux上一般会自带flag{c41a6f35-bb45-4c01…

十六进制转换

十进制转换为十六进制——利用栈的“先进后出”的思想 题目:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。 思路: 1.输入一个十进制数num 2.定义一个链表 3.将余数(…

【Python数据库】Redis

文章目录 [toc]数据插入数据查询数据更新数据删除查询存在的所有key 个人主页:丷从心 系列专栏:Python数据库 学习指南:Python学习指南 数据插入 from redis import Redisdef insert_data():redis_cli Redis(hostlocalhost, port6379, db…

linux(麒麟 centos7)安装7z

1、下载7-Zip下载地址:7-Zip - 程序下载2、解压mkdir 7zip --创建文件夹7zipmv 7z2301-linux-x64.tar.xz 7zip/ --移动cd 7zip tar -xvJf 7z2301-linux-x64.tar.xz --解压 输入ll 查看解压后的文件3、安装cp 7zzs /usr/local/bin/ 输入7zzs 查看是否安装成功4、…

NFT tokenURI使用去中心化IPFS链接

前言tokenURI指向 存放NFT Metadata信息的json文件 所在的URLjson文件最好用去中心化方式存储,例如IPFS 使用IPFS存储文件 自己搭建IPFS需要下载客户端和保持节点运行 较麻烦,我们可采用第三方服务商提供的服务 例如Pinata、4everland等,我们以4everland(4everland.org)为例…

iOS ------ Block的总结

前面看了Block的基本知识,和一些源码。但对于block怎么用的还不了解,代码中出现block会看不懂,现在来具体看一下Block的用法并做个总结。 1.Block是什么 block对象是一个C语言结构体,可以并入C和OC的代码中,Block本质…