EXPLAIN优化慢SQL

devtools/2024/11/16 21:25:35/

项目中发现数据查询很慢,导致前端超时等待的问题。经过日志打印发现,查询sql耗时10秒以上,相关sql如下:

sql">select distincttablemodel.*from pjtask_model tablemodelJOIN buss_type_permission a ON (tablemodel.fields_data_id = a.db_category_id)wherea.status = '0'ANDa.del_flag = '0'ANDtablemodel.del_flag = '0'AND (a.validity_time IS NULLORa.validity_time > sysdate())AND (a.permission_user_id = 1ORa.permission_role_id IN (SELECTb.role_idFROMsys_user_role bWHEREb.user_id =1)ORa.permission_dept_id IN (SELECTc.dept_idFROMsys_user cWHEREc.user_id =1))and (a.permission_type = 0 or tablemodel.pj_flag = 2)and tablemodel.status  in("JDZT100010","JDZT10000","JDZT10001","JDZT10002","JDZT10006","JDZT10007","JDZT100061")order bytablemodel.create_time desc

经过查看此sql,决定查看执行计划。在sql前添加EXPLAIN。代码如下:

sql">EXPLAIN select distincttablemodel.*from pjtask_model tablemodelJOIN buss_type_permission a ON (tablemodel.fields_data_id = a.db_category_id)wherea.status = '0'ANDa.del_flag = '0'ANDtablemodel.del_flag = '0'AND (a.validity_time IS NULLORa.validity_time > sysdate())AND (a.permission_user_id = 1ORa.permission_role_id IN (SELECTb.role_idFROMsys_user_role bWHEREb.user_id =1)ORa.permission_dept_id IN (SELECTc.dept_idFROMsys_user cWHEREc.user_id =1))and (a.permission_type = 0 or tablemodel.pj_flag = 2)and tablemodel.status  in("JDZT100010","JDZT10000","JDZT10001","JDZT10002","JDZT10006","JDZT10007","JDZT100061")order bytablemodel.create_time desc

 运行结果:

mysql索引介绍可以参考:

MYSQL explain详解-CSDN博客

可以看出,联表条件为ON (tablemodel.fields_data_id = a.db_category_id),但执行计划展示出来的信息,表示联表没有使用到索引查询,而是全量扫描表信息。

sql">select distincttablemodel.*from pjtask_model tablemodelJOIN buss_type_permission a ON (tablemodel.fields_data_id = a.db_category_id)

查看buss_type_permission(a) 表结构,发现确实没有db_category_id字段的索引。

所以我们添加索引:

再来运行执行计划语句,结果如下:

可以看到表buss_type_permission(a)的 key列,使用了db_category_id索引,rows也从6984改为了9,极大缩小了扫描数据的范围,提升sql查询效率。


http://www.ppmy.cn/devtools/134524.html

相关文章

【分布式】CAP理论

CAP定理的核心要点: CAP定理指出,任何一个分布式系统在面对网络分区(Partition)的情况下,最多只能同时满足以下三个特性中的两个: 一致性(Consistency): 所有节点在同一…

VS2022编译32位OpenCV

使用环境 Visual Studio 2022 OpenCV: 4.7.0 cmake: 3.30.2一、使用CMake工具生成vs2022的openCV工程解决方案 打开cmake,选择opencv的源代码目录,创建一个文件夹,作为VS工程文件的生成目录 点击configure构建项目,弹出构建设置…

MySQL --- 自定义函数获取部门层级名称

介绍 使用MySQL自定义函数,获取当前部门及上级所有部门的名称。 示例代码 向自定义函数传入子级部门id,自定义函数返回,子级部门名称及上级所有层级部门名称,以" / "分隔符分割。 (1)创建自定…

[Mysql] Mysql的多表查询----多表关系(下)

4、操作 方式二&#xff1a;创建表之后设置外键约束 外键约束也可以在修改表时添加&#xff0c;但是添加外键约束的前提是&#xff1a;从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。 语法&#xff1a; alter table <从表名> add constr…

前后端分离练习(云客项目)

这几天学习了一点前端的开发&#xff0c;后面通过这个小项目来整理开发的过程&#xff0c;参考的是动力节点的动力云客这个项目&#xff0c;大家有兴趣可以去看一下视频&#xff0c;我更多的是学习了它的前端开发&#xff0c;后端我是用自己的方式来的&#xff0c;那么开始今天…

微信小程序navigateTo:fail webview count limit exceed

theme: nico 你们好&#xff0c;我是金金金。 场景 uniapp编写微信小程序&#xff0c;使用uni.navigateTo跳转的过程中报错如下&#xff1a; 报错意思也非常明显了&#xff1a;errMsg":"navigateTo:fail webview 数量超出限制 排查 排查之前我先贴一下代码 代码非…

实现 Toy-React , 实现 JSX 渲染

一、简介 JSX 是属于 React 中的一大特性&#xff0c;因此&#xff0c;本文将实现自定义 JSX 渲染功能&#xff0c;同时也会实现部分 React 中拥有的功能&#xff0c;以便加深理解. 二、准备工作 目录结构 目录结构比较简单&#xff0c;就不详细说明了 webpack 配置 由于我…

ESP32-C3 开发笔记 之 arduino 正常上传 串口乱码2024/11/15

ESP32-C3 开发笔记 之 arduino 正常上传 串口乱码 ESP32-C3 开发笔记 之 arduino 正常上传程序 但是打开串口,串口快速刷新 芯片一直处于重启状态 找了很久的原因没找到,用Mixly 上传就正常 最后看到这篇 文章https://blog.csdn.net/luooove/article/details/132351398修改了Fl…