mysql in查询优化

都说in查询比较慢,要改成子查询模式,ChatGPT大模型告诉了我,SQL中替换In查询的10种方法,太赞了,按照这个说的集中方法,验证一下。因为实际项目中确实存在in很多的情况。
查询执行的先后顺序对优化有必要,因此下面的逻辑需要了解。

in 先执行子查询,使用于内小,外大
exist 先执行外层表驱动表,适用于外小,内大
in适合 外层大, 内层小, 先执行内层子查询,过滤出来一小部分数据,再用来查外层
exist适用于外层小,内层大,先执行外层驱动表查询,出来一部分数据,再查内层表

下面的in里面的值不是固定的,

SELECT id, as_id, aa_type, CODE, NAME, mnemonic, remark, STATUS, create_user, create_time, update_user, update_time FROM acc_assisting_accounting WHERE ( STATUS IN ('01', '02') AND as_id = 1 AND id IN ( 374663, 510330, 510333, 374826, 194, 230, 111, 233, 357, 564001, 96, 564000, 10, 11, 12, 13, 563675, 15, 16, 441211, 362, 363, 121, 364, 243, 365, 410181, 526376, 366, 367, 425305, 400, 445538, 368, 402, 369, 127, 403, 8, 9, 510315, 24, 25, 374564, 367070, 370, 374725, 371, 250, 372, 251, 373, 131, 374, 386148, 375, 376, 134, 377, 139, 564023, 564144, 564145, 563331, 561273, 564143, 32, 564148, 564146, 564147, 519437, 564029, 374792, 380, 374835, 381, 260, 382, 261, 141, 384, 385, 419973, 386, 388, 524699, 357442, 149, 420959, 305, 510336, 564150, 564155, 564156, 494009, 456443, 564154, 564157, 371993, 564158, 390, 393, 154, 397, 276, 399, 313, 159, 564162, 564163, 564161, 52, 564167, 564164, 374974, 374854, 564169, 563998, 374210, 160, 162, 466216, 163, 164, 165, 320, 321, 288, 169, 364386, 329, 60, 209, 62, 524790, 514113, 365133, 294, 173, 295, 333698, 296, 176, 331, 332, 214, 215, 344905, 337, 338, 381698, 363223, 394580, 374091, 77, 374634, 510387, 183, 340, 341, 342, 343, 102, 345, 346, 380752 )) ORDER BY CODE ASC

mysql解析器,查看一下扫描rows很少啊
select_typeSIMPLE表示简单查询,不包含子查询或UNION
1
1 find_in_set过滤的模式
基本上全表扫描了
1
2 exists替换in操作符
从实际效果验证,依旧不好。还不如in,固然chatgpt说的专家,也就是砖家。不要认为exist就一定性能好。
1
3 with方式
with as方式mysql5.7及以下版本不支持,而我们的生产环境就是mysql5.7,因此这条路是走不通的。
1
不过我还是想知道,这个效果怎么样,于是在本地的mariadb上运行,效果如下,嗯,貌似有进步。不过也让我研究一下explain的结果是啥意思。
2
虽然上面type出现了ALL,但那是临时表,也就是in里面的内容,所以没有影响。主表是eq_ref因为走了逐渐索引
1
select_typeMATERIALIZED说明采用的是物化视图,因为物化视图是预计算和存储的查询结果,用于提高查询性能,也就是说with as会创建物化视图,有助于性能优化
PRIMARY显示最外层的select语句是我的主表aaa
虽然mysql 5.7不支持with写法,可以通过下面的方式来实现

SELECT aaa.*
from acc_assisting_accounting aaa
inner join (
select 1 as id union allselect 2 as id union allselect 3 as id union allselect 4 as id union allselect 23 as id union allselect 24 as id 
)	t on t.id = aaa.id
where as_id=112514

DERIVED表示派生表,通过子查询中派生的临时表
1

4 虚拟表
将in的内容,创建一个临时表,按照别人的示例,我为什么执行不通过呢?语句貌似没有错误.
查看mysql select 临时表, 应该是要先创建一张temp的临时表。
但是看了mysql临时表 表变量_SQL 使用 VALUES 生成带数据的临时表实例代码详解,好像有不对
1

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

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

相关文章

【EI会议征稿】2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)

2024 International Conference on Advanced Mechatronic, Electrical Engineering and Automation ●会议简介 2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)将汇聚全球机械电子、电气工程与自动化领域的专家学者,共同…

计算机网络:CSMA/CA协议

计算机网络:CSMA/CA协议 CSMA/CA概述帧间间隔工作原理退避算法虚拟载波监听 CSMA/CA概述 讲解CSMA/CA之前,我们回顾一下CSMA/CD的三个特性: 多址接入MA:多个主机连接在一条总线上,竞争使用总线 载波监听CS&#xff1a…

web网站搭建实验

综合练习:请给openlab搭建web网站 网站需求: 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料 和缴费网站,基于,www.openlab.com/data网站…

X-314智能合约:金融创新的强大引擎

💥火爆到烫手的X-314智能合约🔥 X-314智能合约是基于以太坊区块链开发的,具有高度可定制性和灵活性。 ave开单独板块;详细资料已经准备好;对web3感兴趣的大佬货;多交流多指导🤝 ​X-314智能合…

JUC(java.util.concurrent) 的常见类

Callable 接口 Callable 的用法 Callable 是一个 interface(类似之前的 Runnable,用来描述一个任务,但是没有返回值)也是描述一个任务的,有返回值。方便程序猿借助多线程的方式计算结果. 例如:创建线程…

Zynq7000系列中PL时钟使用

可编程逻辑(PL)具有自己的时钟管理生成和分配功能,并从处理器系统(PS)中的时钟发生器接收四个时钟信号(如图25-10所示)。 在嵌入式系统中,PL时钟的管理和分配对于确保逻辑电路的正确…

QT跨平台读写Excel

QT跨平台读写Excel 背景Excel工具CMakeLists.txt工程目录 背景 开发框架QT,makefile构建工具CMake,编译器MinGW Excel工具 考虑跨平台则不能使用针对微软COM组件的QAxObject来读写Excel,因此使用开源QtXlsx。 这里是将QXlsx当做源码嵌入使…

使用FastDDS编译IDL文件

1.安装FastDDS环境 Ubuntu22.04 1.1安装依赖的软件 sudo apt-get update //基础工具安装 sudo apt install cmake g python3-pip wget git //Asio 是一个用于网络和低级 I/O 编程的跨平台C库,它提供了一致的 异步模型。 TinyXML2是一个简单,小巧&…

Redis进阶——GEO地理坐标附近商户案例

目录 GEO数据结构的基本用法GEO概述GEO命令的使用GEO数据结构练习 导入店铺数据到GEO业务场景实现代码如下 实现附近商户功能 GEO数据结构的基本用法 GEO概述 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储…

过氧化氢滴定方法可用的PFA器皿有哪些?

滴定液:KMnO4标准溶液 试液:H2O2商品液(3%),H2SO4 (3.0mol/L ) 指示剂:酚酞指示剂 仪器:分析天平,PFA酸式滴定管50mL,PFA 移液管10mL/25mL、PFA 容量瓶250mL、PFA锥形瓶250mL 1、KMnO4标准溶液浓度的标定(见实验:高锰酸钾标准溶液的配制与…

nodejs工具脚本json转excel

json转excel 主要使用 sheetjs 库 vim convertJsonToExcel.js 封装转换方法 import fs from fs; import XLSX from xlsx;/*** 扁平化嵌套json对象* param {Object} jsonObj* param {String} prefix* returns*/ export function flattenKeys(jsonObj, prefix ) {const resul…

java-springmvc 01

MVC就是和Tomcat有关。 01.MVC启动的第一步,启动Tomcat 02.Tomcat会解析web-inf的web.xml文件

战姬物语部署

一.准备环境 #关闭seliunx和防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld #配置源,并安装常用工 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo …

Spring Task 定时任务(含结合cron 表达式)

目录 一、Spring Task的介绍 二、使用方法 2.1 配置类启用定时任务支持: 2.2 同步定时任务 ​编辑2.3 fixedRate 可以看出不能满足我们的日常需求 那如何让其开启异步呢(开启多个线程工作) 三、Spring Task 结合cron表达式 3.1 corn 表…

【动态规划】dp 路径问题(不同路径、路径最小和、地下城游戏...)

文章目录 1. 前言 - 理解动态规划算法1.5 关于dp路径问题2. 例题2.1_不同路径Warning. 关于状态表示 3. 算法题3.1_不同路径II3.2_珠宝的最高价值3.3_下降路径最小和3.4_最小路径和3.5_地下城游戏关于状态表示的两种选法: 1. 前言 - 理解动态规划算法 关于 动态规划…

超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(一)

4月8日,苹果发布了其最新的多模态大语言模型(MLLM )——Ferret-UI,能够更有效地理解和与屏幕信息进行交互,在所有基本UI任务上都超过了GPT-4V! 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

做生意能只用电子名片吗?

做生意,收到纸质名片是不可避免的,电子名片不可能完全能代替纸质名片,如果想方便管理纸质名片的话,将名片拍照转为Excel是一种不错的方案,它可以让我们方便地通过表格筛选或搜索需要的信息,极大地提高了信息…

cdh cm界面HDFS爆红:不良 : 该 DataNode 当前有 1 个卷故障。 临界阈值:任意。(Linux磁盘修复)

一、表现 1.cm界面 报错卷故障 检查该节点,发现存储大小和其他节点不一致,少了一块物理磁盘 2.查看该磁盘 目录无法访问 dmesg检查发现错误 dmesg | grep error二、解决办法 移除挂载 umount /data10 #可以移除挂载盘,或者移除挂载目…

【C语言】深入解析选择排序算法

一、算法原理二、算法性能分析三、C语言实现示例四、总结 一、算法原理 选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是不断地选择剩余元素中的最小(或最大)元素,放到已排序的序列的末尾&#xff…

RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce

目录 什么是Shell 1、Shell简介 2、印刷约定 一、什么是RCE 漏洞产生条件: 漏洞检测: 1.远程命令执行 system()函数: passthru()函数: exec()函数: 无回显 shell_exec()函数: 2.远程代码执行 e…