いいえ、私はbitでbit、約HAVING
を意味しています。HAVINGとエイリアスのパフォーマンスに違いはありますか?
これらの2つのクエリは、差分パフォーマンス特性を持っている場合今、私の質問は次のとおりです。
はい、それは異なっている必要があり
SELECT x + y AS z, t.* FROM t
WHERE
x = 1
HAVING
z = 2
いいえ、私はbitでbit、約HAVING
を意味しています。HAVINGとエイリアスのパフォーマンスに違いはありますか?
これらの2つのクエリは、差分パフォーマンス特性を持っている場合今、私の質問は次のとおりです。
はい、それは異なっている必要があり
SELECT x + y AS z, t.* FROM t
WHERE
x = 1
HAVING
z = 2
を有する
SELECT x + y AS z, t.* FROM t
WHERE
x = 1 and
x+y = 2
を持たずに - (1)はより速くなると予想される。
最初にメインクエリが実行され、フィルタが適用されていることを確認すると、基本的に(クエリマイナスの)返されたデータセットで機能します。
最初のクエリは、それらのレコードをまったく選択しないため、望ましいはずです。
これが当てはまる場合は、where句でエイリアスを使用できない理由をもう一度尋ねます。これは誰か(mysqlの作者)による設計上の決定であり、より複雑なクエリを書くか、パフォーマンスを低下させる原因になります。 – ripper234
エイリアスは、結果セットが返された後に割り当てられます。そのため、where節ではなくhaving節で利用可能です。 SQLサーバでは、派生カラムを使用することができますが、私はMysqlでそのようなオプションを認識していません。 –