不要再误解MySQL in的用法了!
MySQL中的in操作符一直以来都是备受开发者们青睐的,它可以代替大量的"OR"操作符,将多个条件组合起来,减少了开发者的代码量和复杂度。然而,很多人对于in操作符的使用情况存在着一个误解,即认为只要用了in操作符就一定能够走索引,实际上,这种认知是错误的,大家都被不少转载的文章所欺骗了!
实际上,真正影响in走不走索引的是in中符合条件的数据占比多少,从而影响MySQL是否走索引!之前有人测试发现,符合in条件的数据超过40%(这个阀值不一定是40%,只是之前测试的结果),之后就开始走全表,不走索引。下面我们来看一下实践的例子。
在下面这个例子中,我们通过explain来分析了一个类似于“select * from test where id in (1,2,3,4,5,6,7,8,9,10)”这样的SQL语句的执行情况。当不考虑回表影响、覆盖索引的情况下,in中符合数据占整表数据较多的时候,会开始走全表扫描,不走索引。如下图:

上图中的Extra列值显示的是"Using where",表示MySQL需要在过滤给定条件之后,再一步步判断是否需要使用索引。另外需要说明的是:
1.当in单个值的时候,MySQL会自动优化为"=",故还是会走索引。
2.当in和select的列为同个的时候,由于不需要走回表的情况下,会走覆盖索引。
最后,推荐开发者们多关注一些优秀的MySQL学习资源,比如MySQL视频教程,这样可以更好地了解MySQL运行机制和内部实现,提高自己的开发水平。

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02