Mysql or与in的区别

创建一个表格 内涵一千万条数据

这张表中,只有id有建立索引,且其余都没有

测试1:使用or的情况下,根据主键进行查询

可以看到根据主键id进行or查询 花费了30-114毫秒,后面30多毫秒可能是因为Mysql的Buffer Pool缓冲池的原因导致的

测试2:使用in的情况下,根据主键id进行查询

可以看到使用in的情况下,查询效率在30-90ms之间

测试3:使用or的情况下,不走索引进行查询

可以看到在不使用索引的情况下,使用or的查询速度为50秒左右

测试4:使用in的情况下,不走索引进行查询

in比or快了一秒左右但也很慢,但也许是我测试数据有些问题

总结:

  • 当字段有添加索引时,IN 和 OR 查询的速度没有太大区别。
  • 但是,当字段没有添加索引时,连接的字段越多(例如 1 OR 2 OR 3 OR 4 ...),OR 查询的效率会明显低于 IN 查询
  1. IN 查询

    • IN 查询 用于检查某个字段是否在给定的值列表中。例如,SELECT * FROM users WHERE user_id IN (1, 2, 3)
    • IN 查询 的时间复杂度通常是 O(logn)
    • 这是因为数据库引擎可以使用二分查找或类似的优化策略来快速定位给定值。
  2. OR 查询

    • OR 查询 用于连接多个条件,例如 SELECT * FROM users WHERE age = 25 OR age = 30 OR age = 35
    • OR 查询 的时间复杂度通常是 O(n)
    • 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
相关推荐
shyの同学14 分钟前
分布式ID生成方案:数据库号段、Redis与第三方开源实现
redis·分布式·mysql·id
月落星还在18 分钟前
Redis 的过期策略与键的过期时间设置
数据库·redis·bootstrap
cg50173 小时前
MySQL数据库复杂的增删改查操作
数据库·mysql
虾球xz4 小时前
游戏引擎学习第147天
数据库·学习·游戏引擎
向上的车轮5 小时前
什么是时序数据库?有哪些时序数据库?常见的运用场景有哪些?
数据库·时序数据库
岱宗夫up6 小时前
【Python】Django 中的算法应用与实现
数据库·python·opencv·django·sqlite
比花花解语7 小时前
使用数据库和缓存的时候,是如何解决数据不一致的问题的?
数据库·缓存·数据一致性
YGGP7 小时前
Redis篇:基础知识总结与基于长期主义的内容更新
数据库·redis·缓存
KINICH ahau7 小时前
数据库1-2章
数据库·oracle
我想吃烤肉肉8 小时前
leetcode-sql数据库面试题冲刺(高频SQL五十题)
数据库·sql·leetcode