2010-11-27 15 views

答えて

1

を有する

SELECT x + y AS z, t.* FROM t 
WHERE 
x = 1 and 
x+y = 2 

を持たずに - (1)はより速くなると予想される。

最初にメインクエリが実行され、フィルタが適用されていることを確認すると、基本的に(クエリマイナスの)返されたデータセットで機能します。

最初のクエリは、それらのレコードをまったく選択しないため、望ましいはずです。

+0

これが当てはまる場合は、where句でエイリアスを使用できない理由をもう一度尋ねます。これは誰か(mysqlの作者)による設計上の決定であり、より複雑なクエリを書くか、パフォーマンスを低下させる原因になります。 – ripper234

+0

エイリアスは、結果セットが返された後に割り当てられます。そのため、where節ではなくhaving節で利用可能です。 SQLサーバでは、派生カラムを使用することができますが、私はMysqlでそのようなオプションを認識していません。 –

1

HAVINGは、GROUP BYを含むクエリに使用されるか、集約関数の結果を含む単一の行を返します。たとえば、SELECT SUM(scores) FROM t HAVING SUM(scores) > 100は、1つの行または全く行を返しません。

2番目のクエリはSQL標準によって無効と見なされ、一部のデータベースシステムでは受け入れられません。

+0

はい、質問は 'mysql'タグ付きです – ripper234

+0

確かに、それはまたSQLのタグが付いています。 – fredt

関連する問題