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)。
    • 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
相关推荐
要开心吖ZSH1 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
l1t2 小时前
在windows中测试musql数据库
数据库·sqlite·go·1024程序员节
鬼手点金3 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
CRMEB系统商城3 小时前
Redis + 消息队列 + 连接池:CRMEB PRO 性能优化的三驾马车
大数据·数据库·人工智能·小程序·php·1024程序员节
鸽芷咕3 小时前
KingbaseES SQL 调优六步法:定位、诊断、下药、验证,一步都别省
数据库
黄俊懿4 小时前
【架构师从入门到进阶】第七章:缓存和存储的优化思路——第一节:缓存概述
数据结构·数据库·分布式·缓存·架构·系统架构·1024程序员节
John_Hui4 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
java_nnnn4 小时前
Redis 核心特性与应用场景:从底层原理到分布式系统应用
数据库·redis·1024程序员节
Random Glow4 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
何中应4 小时前
MySQL 连接驱动单独下载的两种方式
数据库·mysql·maven