2010-12-07 13 views
2

タイトルはそれ自体について語ります。最初のクエリ -これらの2つのクエリの違いは何ですか

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

2番目のクエリ - これらの2つのクエリの違いは何ですか

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

(すなわち、任意のパフォーマンスゲイン/ロスか何かがありますか)?

編集

私は冗談か何かだと思ったすべての人々に、私はちょうど私は、PostgreSQL 8.4で両方のクエリを使用していることを言いたいです。 どちらのクエリもうまく動作します

+0

Yikes!私は最初の構文を知らなかった。これはMySqlですか? – ClosureCowboy

+0

パフォーマンスの違いはおそらくデータベースエンジンによって異なります。 –

+1

@Lieven - 行コンストラクタと呼ばれています。彼らは標準のSQLにあり、徐々にMS SQL Serverに入っています。たとえば、行コンストラクタを使用してINSERTのVALUES句に複数の行を指定できるようになりました。 –

答えて

1

2つのクエリの間に違いはありませんが、実際にはDBMSのオプティマイザに依存します。これらの形式の1つが、オプティマイザが他の形式では使用できないインデックスを使用する機会を「認識」できないことがあります。

@Jineshによれば、DBMSで利用可能な機能を使用して、オプティマイザが作成するプランを調べる方がよいでしょう。

2

ユーザーこれを見つけるための計画を説明します。

+1

+1しかし、私はPostgresが両方とも同じ実行計画を使用するのに十分にスマートであると思っています –

+0

@a_horse_with_no_name:あなたは絶対に正しいこれら両方のクエリの実行計画 –

1

インデックスがidxの場合、パフォーマンスが変わります。

+0

申し訳ありませんが、最初のクエリは正常に動作します。 –

関連する問題