假设我有一个查询,
SELECT * FROM tab1 WHERE col1 BETWEEN 111 AND 111;
或查询
SELECT * FROM tab1 WHERE col1=111;
两者之间的表现有什么不同?
表可以很大,并且可以多次查询。
编辑:查询在WHERE子句中最多可包含15个字段,如col1。此外,列始终是主键的一部分。
答案 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
被视为用于确定索引的不等式。