创建一个表格 内涵一千万条数据
这张表中,只有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 查询
-
IN 查询:
- IN 查询 用于检查某个字段是否在给定的值列表中。例如,
SELECT * FROM users WHERE user_id IN (1, 2, 3)
。 - IN 查询 的时间复杂度通常是 O(logn)。
- 这是因为数据库引擎可以使用二分查找或类似的优化策略来快速定位给定值。
- IN 查询 用于检查某个字段是否在给定的值列表中。例如,
-
OR 查询:
- OR 查询 用于连接多个条件,例如
SELECT * FROM users WHERE age = 25 OR age = 30 OR age = 35
。 - OR 查询 的时间复杂度通常是 O(n)。
- 这是因为对于每个条件,数据库引擎都需要逐一扫描数据集,直到找到匹配的行。
- OR 查询 用于连接多个条件,例如