SQL:BETWEEN和IN(更快)

RPS*_*RPS 5 sql sql-server-2005

可能重复:
BETWENEN和IN之间是否存在MySQL或SQL中的性能差异?

如果我有以下ID:

1,2,3,4,5,6

使用IN或between子句删除是否更好?

Mar*_*ers 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上执行的.其他系统的结果可能不同.