对BETWEEN具有相同限制的SQL查询

时间:2017-03-09 11:54:43

标签: sql performance db2

假设我有一个查询,

SELECT * FROM tab1 WHERE col1 BETWEEN  111 AND 111;

或查询

SELECT * FROM tab1 WHERE col1=111;

两者之间的表现有什么不同?

表可以很大,并且可以多次查询。

编辑:查询在WHERE子句中最多可包含15个字段,如col1。此外,列始终是主键的一部分。

1 个答案:

答案 0 :(得分:2)

我会严重怀疑在写的两个查询中会有任何明显的区别。实际上有两种情况:

  • col1没有索引。两者都会进行全表扫描。第二个(很可能)会进行两次比较而不是between的一次比较。这应该不明显。
  • col1上的索引。两者都会使用索引。

更有趣的案例是:

 WHERE col1 BETWEEN 111 AND 111 AND col2 > 0
 WHERE col1 = 111 AND col2 > 0

第二个可以充分利用(col1, col2)上的索引。第二个可能不会。 DB2确实可以检测between限制相同的特定情况。通常,between被视为用于确定索引的不等式。