我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MYSQL的IN查询效率慢的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MYSQL的IN查询效率慢的问题

最近项目的老代码又出问题了,mysql的in查询一次查询了5万个数据,cpu一下飙升到100%,这条查询sql也运行的近600s,那么是什么原因导致mysql的in查询效率如此之低,并且没有走索引呢?

1. 类型转化

select * from test_table where test_id in ();

此sql的test_id在表中是BIGINT类型,但是代码中传入的List类型,有可能是类型转化的问题,导致sql没有走索引,但是经过explain排查sql之后,排除了这个可能。
原因是如果MYSQL表中的test_id字段类型是int类型的,无论传入的参数是varchar类型还是int类型都会走索引;如果MYSQL表中的test_id字段类型是varchar类型的,只有在传入的参数是int类型的才会走索引,而传入varchar类型的将不会走索引。

2. IN的取值范围较大

因为本次的查询sql的in查询的范围大约有5万条,当IN的取值范围较大时会导致索引失效,走全表扫描。
那么IN的取值范围有多少条的时候会走索引呢?
新建了一张表,test_id有索引,插入了30万的数据。
explain上述sql,发现in的取值范围在10000条以内的时候,此条查询走索引
但是一旦in的取值范围超过10000条后,将不会走索引。

3. 总结

当然在in的字段添加了索引的情况下,最终in走不走索引由mysql 优化执行器去判断,此底层逻辑较为复杂,但是在笔者的条件下,in的取值范围限制在10000条以内时,将走索引

来源地址:https://blog.csdn.net/alidingding/article/details/131627160

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MYSQL的IN查询效率慢的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql倒序查询效率问题如何解决

在执行MySQL倒序查询时,主要的性能问题通常出现在ORDER BY子句上,特别是在大型数据集上。以下是一些解决这些性能问题的方法:索引:确保按照逆序查询的列上创建了适当的索引。这将帮助MySQL优化查询,并且可以显著提高性能。使用LIMI
mysql倒序查询效率问题如何解决
2024-04-12

【③MySQL 数据查询】:提高查询的效率

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据查询的讲解(基本、分组、排序、聚合、分页、条件查询) 目录 前言一、基本查询二、条件查询三、聚合函数(统计函数)四、分组查询五、排序查询五、分页查询六、总结
2023-08-19

MySQL慢查询优化问题-解决办法

目的根据发现的问题,找到原因,然后对症下药借鉴资料:没用过慢查询日志,别说自己做过数据库优化慢查询日志概念记住七个字搞定索引失效问题发现问题(主动/被动)问题点:数据库查询过程中速度过慢的SQL语句主动:数据库默认情况下slow_query_log的值为OFF
MySQL慢查询优化问题-解决办法
2019-08-01

MySQL Threads_running飙升与慢查询的相关问题解决

背景年前本应该是回顾一年工作和收尾的阶段,奈何各种促销,活动都等着春节,因此也遇到了不少的问题,回顾了一下最近遇到的问题,发现有好几个问题比较类似,正好整理一下,作为年前收尾的案例吧。表现上都是数据库假死,无响应,发生的场景有较高的业务压力
2022-05-22

mysql的in+子查询

【mysql最糟糕的子查询:in+子查询】 select * from film where film_id in (select film_id from film_actor where actor_id = 1) 一般认为: 先执行子
2023-08-18

Galera集群对MySQL查询效率的影响

Galera集群通过其独特的多主同步复制机制,对MySQL查询效率产生了一定的影响。以下是对其影响的详细分析:Galera集群对MySQL查询效率的影响多主架构的优势:Galera集群采用真正的多主架构,允许在任何节点上进行读写操作,从而
Galera集群对MySQL查询效率的影响
2024-09-04

编程热搜

目录