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)。
    • 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
相关推荐
CoderYanger2 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
wafrdggh5 小时前
2026电商快递批量查询怎么用?固乔助手模板设置评测
大数据·数据库·小程序
一个天蝎座 白勺 程序猿5 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
龙腾AI白云9 小时前
仿真到现实(Sim-to-Real)迁移:跨越仿真与现实鸿沟
数据库·机器学习·plotly·知识图谱·tornado
freejackman11 小时前
【实战二】字段级血缘追踪:拆解 AST 迷局,精准穿透函数链与子查询
大数据·数据库·sql
.痞老板.12 小时前
mysql初阶--增删改查操作
数据库·mysql
lambo mercy17 小时前
AI智能租房助手
数据库
浮生若城19 小时前
MySQL:库与表的操作
数据库·mysql
薛定谔的悦19 小时前
光储充一体机从主控到执行单元的双层架构
数据库·mongodb·架构
数字新视界19 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统