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)
    • 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
相关推荐
ChinaRainbowSea9 分钟前
十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明
android·java·数据库·redis·后端·bootstrap·nosql
茂桑21 分钟前
Redis缓存穿透、击穿、雪崩介绍以及解决方案
数据库·redis·缓存
醒了就刷牙21 分钟前
整理:熟悉MySQL的使用和运行原理,掌握索引、事务、锁等机制。了解存储引擎、读写分离、分库分表。
android·数据库·mysql
lusklusklusk23 分钟前
Sqlserver DBCC Check 遇到Msg 3853报错涉及sys.columns和sys.objects信息不匹配的解决方法
数据库·sqlserver
肥学1 小时前
redis哨兵玩法全过程笔记(redis7+版本)
数据库·redis·笔记
栗筝i1 小时前
Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲
数据库·sql·spring
二月十六7 小时前
SQL Server中RANK()函数:处理并列排名与自然跳号
数据库·sqlserver·rank
ianozo7 小时前
BUU10 [极客大挑战 2019]LoveSQL1
数据库·sql·oracle
想做富婆7 小时前
oracle:子查询
数据库·oracle·子查询
ianozo7 小时前
BUU13 [极客大挑战 2019]BabySQL 1
数据库·mysql