可能重复:
Is there a performance difference between BETWEEN and IN with MySQL or in SQL in general?
如果我有以下ID:
1,2,3,4,5,6-
使用IN或between子句删除是否更好?
答案 0 :(得分:9)
BETWEEN
。IN
。性能不应该是决定因素。话虽如此,BETWEEN似乎在我测试的所有示例中都更快。例如:
没有索引,检查每行有x = 1的百万行的表:
SELECT COUNT(*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6); Time taken: 0.55s SELECT COUNT(*) FROM table1 WHERE x BETWEEN 1 AND 6; Time taken: 0.54s
没有索引,检查具有百万行的表,其中x具有唯一值:
SELECT COUNT(*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6); Time taken: 0.65s SELECT COUNT(*) FROM table1 WHERE x BETWEEN 1 AND 6; Time taken: 0.36s
更实际的例子是id列是唯一的并且已编入索引。执行此操作时,两个查询的性能都会接近即时。
SELECT COUNT(*) FROM table2 WHERE x IN (1, 2, 3, 4, 5, 6); Time taken: 0.00s SELECT COUNT(*) FROM table2 WHERE x BETWEEN 1 AND 6; Time taken: 0.00s
所以我会说集中精力编写一个清晰的SQL语句,而不是担心执行速度的微小差异。并确保表格被正确编入索引,因为这将产生最大的差异。
注意:测试是在SQL Server Express 2008 R2上执行的。其他系统的结果可能不同。
答案 1 :(得分:4)
IN相当于1 or 2 or 3 or 4 or 5
之间相当于>= 1 and <= 6
我个人会在范围之间使用,但具体情况和数据库引擎也会有所不同。
答案 2 :(得分:2)
取决于是否实施了索引。如果id是主键,那么两个查询应该具有相同的成本。使用分析器评估SQL。
答案 3 :(得分:1)
在条款之间,除非您希望将来ID不同。
答案 4 :(得分:0)
由于较少的比较,两者之间的速度更快。 使用IN子句,每次都会遍历每个元素。
但两者的目的不同:
在比较时使用Between 在某种程度上的值范围 序列
在与不在的值比较时使用IN 序列