小蔡学Java

MySQL查询in和or的区别

2023-10-17 20:59 158 0 MySQL MySQL

创建表格包含一千万条数据

  • 表中只有id建立索引,其余字段没有索引

测试1:使用 OR 查询根据主键进行查询

  • 根据主键id进行 OR 查询耗时 30-114 毫秒,部分时间可能是由于 Mysql 缓冲池原因

测试2:使用 IN 查询根据主键进行查询

  • 使用 IN 查询效率在 30-90 毫秒之间

测试3:使用 OR 查询不走索引进行查询

  • 不使用索引下,使用 OR 查询速度约为 50 秒

测试4:使用 IN 查询不走索引进行查询

  • IN 查询比 OR 快了约一秒,但速度仍然很慢,可能是测试数据的原因

总结

  • 有索引时,IN 和 OR 查询速度差异不大
  • 无索引时,连接的字段越多(例如1 OR 2 OR 3 OR 4 ...),OR 查询效率远低于 IN 查询

IN 查询:

  • 用于检查某个字段是否在给定的值列表中,如 SELECT * FROM users WHERE user_id IN (1, 2, 3)
  • 时间复杂度通常为 O(logn),由于数据库引擎可使用二分查找等优化策略迅速定位给定值

OR 查询:

  • 用于连接多个条件,如 SELECT * FROM users WHERE age = 25 OR age = 30 OR age = 35
  • 时间复杂度通常为 O(n),对于每个条件,数据库引擎需要逐一扫描数据集直至找到匹配行

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录