SQL:BETWEEN和IN(更快)

时间:2010-07-29 15:34:32

标签: sql sql-server-2005

  

可能重复:
  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子句删除是否更好?

5 个答案:

答案 0 :(得分:9)

  • 如果您的ID 始终连续,则应使用BETWEEN
  • 如果您的ID 可能连续也可能不连续,请使用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 序列