2010-12-07 94 views
2

標題不言而喻。第一個查詢 -這兩個查詢之間有什麼區別

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兩個查詢。 這兩個查詢都可以正常工作

+0

哎呀!我沒有意識到第一種語法。這是MySql嗎? – ClosureCowboy 2010-12-07 06:53:08

+0

任何性能差異可能取決於數據庫引擎。 – 2010-12-07 06:59:29

+1

@Lieven - 他們被稱爲行構造函數。他們使用標準SQL,並逐漸進入MS SQL Server - 例如,現在您可以使用行構造函數在INSERT的VALUES子句中指定多行。 – 2010-12-07 07:27:22

回答

1

我不希望這兩個查詢之間有任何區別,但它確實取決於您的DBMS優化器。這可能是其中一種形式阻止優化器「看到」使用另一種形式沒有的索引的機會。

正如@Jinesh所說,您最好使用DBMS中的任何工具來檢查優化器在這些情況下產生的計劃。

2

用戶解釋計劃以找出答案。

1

如果您有id s和x的索引,性能將發生變化。