位置: 编程技术 - 正文

解决MySQL中IN子查询会导致无法使用索引问题(mysql in的子查询)

编辑:rootadmin

推荐整理分享解决MySQL中IN子查询会导致无法使用索引问题(mysql in的子查询),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql in的子查询,mysql语句in,mysql的in语句,mysql中in的用法,mysql in的子查询,mysql中的in是什么意思,mysql的in语句,mysql中in的用法,内容如对您有帮助,希望把文章链接给更多的朋友!

今天看到一篇关于MySQL的IN子查询优化的案例,

一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。)

随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.)

MySQL的测试环境

测试表如下

建一个存储过程插入测试数据,测试数据的特点是pay_id可重复,这里在存储过程处理成,循环插入W条数据的过程中,每隔条数据插入一条重复的pay_id,时间字段在一定范围内随机

  执行 call test_insert(); 插入行数据

两种子查询的写法

查询大概的意思是查询某个时间段之内的业务Id大于1的数据,于是就出现两种写法。

第一种写法如下:IN子查询中是某段时间内业务统计大于1的业务Id,外层按照IN子查询的结果进行查询,业务Id的列pay_id上有索引,逻辑也比较简单,这种写法,在数据量大的时候确实效率比较低,用不到索引

执行结果:2.秒

第二种写法,与子查询进行join关联,这种写法相当于上面的IN子查询写法,下面测试发现,效率确实有不少的提高

解决MySQL中IN子查询会导致无法使用索引问题(mysql in的子查询)

  执行结果:0.秒

  In子查询的执行计划,发现外层查询是一个全表扫描的方式,没有用到pay_id上的索引

  join自查的执行计划,外层(tpp1别名的查询)是用到pay_id上的索引的。

  后面想对第一种查询方式使用强制索引,虽然是不报错的,但是发现根本没用

  如果子查询是直接的值,则是可以正常使用索引的。

  可见MySQL对IN子查询的支持,做的确实不怎么样。

  另外:加一个使用临时表的情况,虽然比不少join方式查询的,但是也比直接使用IN子查询效率要高,这种情况下,也是可以使用到索引的,不过这种简单的情况,是没有必要使用临时表的。

  下面是类似案例在sqlserver 中的测试,几万完全一样的测试表结构和数量,可见这种情况下,两种写法,在SQL Server中可以认为是完全一样的(执行计划+效率),这一点SQL Server要比MySQL强不少

  下面是sqlserver中的测试环境脚本。

总结:在MySQL数据中,截止5.7.版本,对IN子查询,仍要慎用

利用pt-heartbeat监控MySQL的复制延迟详解 pt-heartbeat数据库做主从复制时,复制状态、数据延迟是否正常是非常关键的指标,那么如何对其进行监控呢?pt-heartbeat是PERCONA开发的一个工具集中的一

通过案例分析MySQL中令人头疼的Aborted告警 本文主要给大家介绍的是关于MySQL中Aborted告警的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:实战Part1:写在最前在MySQL的errorlog中

mac下安装mysql忘记密码的修改方法 一、mac下安装MySQL数据库1.下载MySQL数据库下载地址:访问MySQL的官网

标签: mysql in的子查询

本文链接地址:https://www.jiuchutong.com/biancheng/349016.html 转载请保留说明!

上一篇:CentOS6.7 mysql5.6.33修改数据文件位置的方法

下一篇:利用pt-heartbeat监控MySQL的复制延迟详解

  • 一般纳税人资格证明
  • 海关完税凭证是交给海关么
  • 材料费发票税点
  • 公司购买的
  • 工程产值是怎么计算的
  • 清包工可以有一部分小料吗
  • 年终奖分摊到每个月
  • 软件测试费计入什么科目
  • 销售单用途商业预付卡是否可能涉嫌诈骗
  • 平均房租
  • 预收账款开票怎么做账
  • 劳务发票税率营改增后是多少?
  • 未分配利润转增股本要交税吗
  • 赠品折扣计算法
  • 未认缴出资的股东退股
  • 财务报表层次重大错报风险增大了认定层次
  • 不交社保的单位违法吗?
  • 免抵税额是否能抵销项税额呢?
  • 一卡通充值计入什么费
  • 基金赎回未到账可继续买吗?
  • win11如何连接网址
  • 民间非营利组织会计制度会计科目
  • 暂估入库入库单范本
  • 申报补贴项目 审计
  • 单位代扣公积金比例
  • 公司内部罚款的备注怎么写劳动仲裁
  • 代办营业执照费用税务编码是多少
  • 非盈利组织又称
  • php b/s
  • PHP:pg_escape_identifier()的用法_PostgreSQL函数
  • 编写守护进程
  • 有了php源码该如何使用 新手
  • PHP生成静态页面
  • 购进免税农产品进行进项税额抵扣时,其抵扣率为
  • 日出的时候是圣诞节
  • 营业外支出准则
  • 图像的生成原理
  • bp-神经网络
  • php连接mysql8.0
  • 职工食堂费用计入什么科目
  • mysql的存储
  • 织梦官方网站
  • 织梦自定义字段
  • python PyQt如何使用资源
  • pytest conftest
  • 学习笔记——Django项目的删除数据、查询数据(filter、get、exclude)
  • 分公司可以单独上市吗
  • 个税手续费返还要交企业所得税吗
  • 交通费用报销明细表
  • 餐饮开票税率
  • 零配件供应是什么意思
  • 股东之间转让股权有优先购买权吗
  • sql如何随机抽样
  • win7 64位系统中使用音乐播放器播放音乐很卡该怎么办?
  • vmware如何用
  • win10系统光盘制作
  • windows7 停止服务
  • win10移动版官网
  • macbook graphpad
  • windows8.1默认壁纸
  • mac个性定制在哪
  • qcwlicon.exe - qcwlicon是什么进程 有何作用
  • win7纯净版系统安装教程
  • win10 提示
  • cocos做游戏
  • arcgis栅格图像
  • jQuery中的select操作详解
  • android software
  • High Level Networking Concepts
  • 定额发票查询app
  • 红字发票税务局不愿意退税怎么处理
  • 金米财税不退款怎么办
  • 沈阳市税务局全称
  • 房产税的计税依据及税率
  • 税务上如何界定收入
  • 差旅费的补助计入哪个费用
  • 火药概念股有哪些
  • 个人所得税申请专项扣除有什么用
  • 不明身份人员法律定义?
  • 金税盘里的发票清单怎么导出
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设