这两个查询之间有什么区别

时间:2010-12-07 06:48:33

标签: sql postgresql

标题不言而喻。第一个查询 -

SELECT    *
FROM      table _t
WHERE     (id1, id2, id3, id4) <> (x1, x2, x3, x4)

第二个查询 -

SELECT    *
FROM      table_t
WHERE     NOT
          (id1 = x1 AND
           id2 = x2 AND
           id3 = x3 AND
           id4 = x4)

这两个查询之间有什么区别(即,是否存在任何性能增益/损失)?

修改

对于那些认为我在开玩笑的人,我只想说我在postgresql 8.4中使用了两个查询。 两个查询都运行正常

3 个答案:

答案 0 :(得分:2)

用户解释计划找出答案。

答案 1 :(得分:1)

如果您在idx上有索引,则效果会发生变化。

答案 2 :(得分:1)

我不希望两个查询之间有任何区别,但它确实依赖于DBMS的优化器。可能是这些形式之一阻止优化器“看到”使用另一种形式没有的索引的机会。

正如@Jinesh所说,你最好使用DBMS中可用的任何工具来检查优化器在这些情况下产生的计划。