当前位置: 首页 > news >正文

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)
    • 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
http://www.lryc.cn/news/328660.html

相关文章:

  • STM32——USART
  • WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具
  • HarmonyOS实战开发-如何实现一个支持加减乘除混合运算的计算器。
  • 每日OJ题_子序列dp⑥_力扣873. 最长的斐波那契子序列的长度
  • 病毒循环Viral Loop是什么?为何能实现指数增长
  • 下载huggingface中数据集/模型(保存到本地指定路径)
  • HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。
  • ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序
  • Oracle 19c 高可用部署实战系列之Data Guard理论与实战
  • ubuntu常用记录
  • 顺序表专题
  • 手写SpringBoot(三)之自动配置
  • vitepress builld报错
  • redis分布式锁-----基于Redis的SETNX命令的简单分布式锁实现
  • HTTP请求头中的Host表示是什么?
  • apk被play protect blocked的解决方案(ADB+Appium+webdriverio)
  • 【BlossomRPC】手把手教你写一个RPC协议
  • 算法之美:堆排序原理剖析及应用案例分解实现
  • Net8 ABP VNext完美集成FreeSql、SqlSugar,实现聚合根增删改查,完全去掉EFCore
  • yolov8直接调用zed相机实现三维测距(python)
  • element跑马灯/轮播图,第一页隐藏左边按钮,最后一页隐藏右边按钮(vue 开箱即用)
  • 下载及安装PHP,composer,phpstudy,thinkPHP6.0框架
  • volatile使用场景总结
  • AcWing 1413. 矩形牛棚(每日一题)
  • macOS Sonoma 14.4.1 (23E224) 正式版发布,ISO、IPSW、PKG 下载
  • WPF使用外部字体,思源黑体,为例子
  • 9、jenkins微服务持续集成(一)
  • VOC(客户之声)赋能智能家居:打造个性化、交互式的未来生活体验
  • 时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测
  • node.js学习(2)