1

わかりました、意味について少しずつ学んでいますHAVING

さて、私の質問は、これら 2 つのクエリに異なるパフォーマンス特性があるかどうかです。

持たずに

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

持つと

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

2 に答える 2

1

はい、違うはずです-(1)より速いと予想されます。

Haveは、最初にメインクエリが実行され、次に、Havingフィルタが適用されることを保証します。したがって、基本的に、(クエリからHavingを差し引いた)によって返されるデータセットに対して機能します。

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

于 2010-11-27T11:08:26.087 に答える
1

HAVING は、GROUP BY を含むか、集計関数の結果を含む単一の行を返すクエリに使用されます。たとえばSELECT SUM(scores) FROM t HAVING SUM(scores) > 100、1 行を返すか、まったく行を返さないかのいずれかです。

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

于 2010-11-27T13:40:34.263 に答える