MySQL中使用IN()查询到底走不走索引?

news/2024/12/2 18:45:47/

MySQL中使用IN()查询到底走不走索引?

看数据量

  • 	EXPLAIN
    SELECT * from users WHERE is_doctor in (0,1); 
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F46PnJDg-1681257665213)(C:%5CUsers%5Cquyanliang%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1681257531822.png)]

  • 很明显没走索引,下面再看一个sql。

  • EXPLAIN
    SELECT * from users WHERE is_doctor in (2,1);
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CecVqr47-1681257665214)(C:%5CUsers%5Cquyanliang%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1681257554058.png)]

  • 又走索引了,所以IN查询走不走索引需要看rows的数据量,in (0,1)时查询出52万多数据量,全表才54万数据量,in (2,1)时只有1万多数据量。

  • EXPLAIN
    SELECT * from users WHERE (is_doctor=0 or is_doctor=1); 与 EXPLAIN
    SELECT * from users WHERE (is_doctor=2 or is_doctor=1);
    

IN后面是不是有子查询

  • EXPLAIN
    SELECT * from users WHERE is_doctor in (SELECT is_doctor from test_in_subselect);
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntJpMJnu-1681257665215)(C:%5CUsers%5Cquyanliang%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1681257606234.png)]

总结

  • IN通常是走索引的,当IN后面的数据在数据表中超过*30%*的匹配时是全表扫描,不走索引,因此IN走不走索引和后面的数据量有关系。
  • 根据实际的情况,需要控制IN查询的范围。原因有以下几点
  • IN 的条件过多,会导致索引失效,走索引扫描
  • IN 的条件过多,返回的数据会很多,可能会导致应用堆内内存溢出。所以必须要控制好IN的查询个数

http://www.ppmy.cn/news/45103.html

相关文章

密码加密之bcrypt

在这里是用的bcrypt加密算法&#xff0c;这种现在比较流行 而且无法进行解密 引入依赖 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</ar…

怎样设置树莓派的IP地址为静态值

在树莓派上设置静态IP地址&#xff0c;可以通过以下步骤进行&#xff1a; 登录到树莓派&#xff1a;通过SSH或物理键盘和显示器连接到树莓派。 打开命令行终端&#xff1a;在树莓派上打开一个命令行终端窗口。 编辑dhcpcd.conf文件&#xff1a;输入以下命令来编辑dhcpcd.conf…

1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光&#xff0c;看起来MIT的课程的确是很有饱满度。 这里&#xff0c;再整理一份课程中的作业要求。 …

js中遍历对象数组并获取对象相应的属性值

JavaScript中遍历对象数组的方法有很多种。以下是常见的四种常见的方法&#xff1a;for​循环&#xff0c;for...of​循环&#xff0c;forEach​方法和map​方法&#xff0c;在遍历的同时&#xff0c;通过访问对象的属性来获取相应的值。 ​for​循环&#xff1a; const objArr…

my ttl clock

文章目录 my ttl clock概述实现补充补充END my ttl clock 概述 最近想检测一下自己的睡眠质量. 想做个闹钟, 从22:00~03:00, 每隔5分钟报时. 将小时:分钟念出来就行. 这样, 我入静之后, 听到的最后时间, 就是我入睡的时间. 看到网上同学写好一个ttl类, 改了一下. 加了检测声…

windows无盘启动技术开发之UEFI(新一代BIOS)引导程序开发之二

by fanxiushu 2023-04-14/18 转载或引用请注明原始作者。 接上文。 上文提到了至少有两种办法制作UEFI的虚拟磁盘驱动。 本文只接收利用BlockIO的方式来构造一个临时用的虚拟磁盘。 之所以说是临时使用&#xff0c;是因为在作为引导程序中&#xff0c;一旦进入到 \EFI\boot\boo…

双榜加冕!加速科技荣登2023准独角兽中国未来独角兽双榜单

4月10日至11日&#xff0c;由杭州市人民政府、民建浙江省委会、中国投资发展促进会主办的第7届万物生长大会在杭州国际博览中心隆重举行。会上&#xff0c;中国投资发展促进会创投专委会、杭州市创业投资协会联合微链共同发布2023杭州市独角兽&#xff08;准独角兽&#xff09;…

【架构设计】如何设计一个几十万在线用户弹幕系统

文章目录 一、前言二、项目介绍客户端轮询WebSocket主动推送 三、弹幕初始架构四、弹幕架构演进五、弹幕存储六、弹幕查询七、总结 一、前言 现在无论是直播还是电视剧&#xff0c;我们都可以看到上面慢慢的弹幕&#xff0c;满足十几万用户在线的弹幕系统&#xff0c;我们该如…