当前位置: 首页 > 知识库问答 >
问题:

mysql 把多个 or 改成 in 会更加高效吗?

张博涛
2023-07-13

mysql 把多个 or 改成 in 会更加高效吗?

共有4个答案

沈巴英
2023-07-13

这个具体取决于数据量和索引的使用情况,如果数据量较小或者索引无法有效使用,那么性能的提升可能并不明显。使用多个OR,数据库需要逐个判断每个条件是否满足,使用IN可以将多个值一次性传递给数据库进行匹配,减少了判断的次数。如果该列存在索引,使用多个OR条件时,每个条件都可能需要单独的索引查找,而使用IN条件可以一次性查找所有的值。

云光明
2023-07-13

如果没有索引或主键or会查全表比较慢, in不会, 整体来说in快,用in数据越少越快, 有索引或主键就差不多
<SQL的36条军规>里面也规定必须使用in代替or,image.png
SQL官方文档里面说明in要快得多
image.png

https://dev.mysql.com/doc/refman/8.0/en/comparison-operators....
贲凌
2023-07-13

参考:
https://blog.csdn.net/xmtblog/article/details/119620495

姚煜
2023-07-13

建议使用in,mysql为in做了很多优化,如果in是不相关子查询,那么会先试着转换为semi join,如果不符合semi join,还会尝试转换为物化来实现,理想情况下都可以转换为连接查询,如果是相关子查询就会转换为exists查询,这些都要比单纯的or逻辑判断要快

 类似资料:
  • 问题内容: 我想知道以下两个方面在性能方面是否有差异 还是MySQL将以与编译器优化代码相同的方式优化SQL? 编辑:改变了‘s到的在注释中规定的原因。 问题答案: 我确实需要知道这一点,因此我对这两种方法进行了基准测试。我始终发现它比使用快得多。 不要相信给出意见的人,科学就是测试和证据。 我运行了1000倍等效查询的循环(出于一致性考虑,我使用): :2.34969592094s :5.837

  • 问题内容: 我在MySQL数据库中存储了各种用户详细信息。最初,它是在各种表中设置的,这意味着数据与UserId链接,并通过有时复杂的调用输出,以根据需要显示和操作数据。建立一个新系统,将所有这些表组合成一个大的相关内容表几乎是有意义的。 这会是帮助还是阻碍? 调用,更新或搜索/操作时的速度考虑? 这是我的一些表结构的示例: 用户-用户ID,用户名,电子邮件,加密的密码,注册日期,IP user_

  • 问题内容: 我已经开发了使用OR查询的系统: 与查询IN进行比较: MYSQL数据库中最好的查询是什么? 问题答案: 用于。 IN将使用索引。 否则(afaik)将不使用索引。 另外,这一点不容忽视,IN版本: 使用更少的代码 更容易维护 更容易理解 仅出于这些原因,我准备为获得代码质量而遭受一点性能损失,但实际上您也获得了性能。

  • 本文向大家介绍mysql的in会不会让索引失效?,包括了mysql的in会不会让索引失效?的使用技巧和注意事项,需要的朋友参考一下 mysql的in会让索引失效吗?不会! 看结果: 顺便说下,in查出的结果,不一定按in排序, 如下: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对呐喊教程的支持。如果你想了解更多相关内容请查看下面相关链接

  • 问题内容: 我正在尝试获取id = 3或id = 9或id = 100的内容…请记住,我可以拥有几百个这些ID。 编写查询的最有效方法是什么? 问题答案:

  • 问题内容: 我在使用MySQL 5.5.22的Django时遇到以下问题。 给定一个具有列ID,级别和存储为a11,a12,a21,a22的2x2矩阵的表,我具有以下行: 给定一个查询集qs,我进行以下更新: django为此生成以下查询(从db.connection.queries中获取该查询,为简洁起见,删除where子句): 然后,我的行如下所示: 对于任何一行,都应该为True,并且据此,