すべてのプロダクト
Search
ドキュメントセンター

PolarDB:HAVING句からWHERE句に条件をプッシュダウンする

最終更新日:Jun 13, 2024

PolarDBを使用すると、SQLクエリのHAVING句からWHERE句に条件をプッシュダウンできます。 クエリのパフォーマンスを向上させるために、複雑なSQLクエリを変換して、以前のフィルタリングに適した条件をHAVING句からWHERE句にプッシュダウンできます。

前提条件

クラスターは、リビジョンバージョンが8.0.2.2.10以降のPolarDB for MySQL 8.0を実行します。 クラスターのバージョンを照会する方法については、「エンジンバージョン」トピックの「エンジンバージョンの照会」を参照してください。

制限事項

  • 条件 (または条件の一部) がGROUP BY句で使用されているフィールド、またはグループ化されたフィールドと同じフィールドのみに依存する場合、条件をHAVING句からWHERE句にプッシュダウンできます。

  • 集計関数はプッシュダウンできません。

背景

HAVING句は、グループ化された結果をフィルタリングするために多くの複雑なクエリで使用されます。 ほとんどの場合、HAVING句の条件は、GROUP BY操作の結果のグループ化されたデータに適用されます。 HAVING句では、以前のフィルタリングに適した条件をWHERE句にプッシュダウンできます。 これにより、クエリの後の段階で処理されるデータの量が最小限に抑えられ、クエリのパフォーマンスと効率が大幅に向上します。

Usage

loose_polar_optimizer_switchパラメーターを使用して、HAVING句からWHERE句への条件プッシュダウンを有効にできます。 loose_having_cond_pushdown_modeパラメーターを使用して、機能を有効にするノードを指定できます。 パラメーター設定については、「クラスターとノードパラメーターの設定」をご参照ください。

Parameters

パラメーター

レベル

説明

loose_polar_optimizer_switch

グローバルとセッション

HAVING句からWHERE句への条件プッシュダウンを有効にするかどうかを指定します。 有効な値:

  • having_cond_pushdown=ON (デフォルト): HAVING句からWHERE句への条件pushdownを有効にします。

  • having_cond_pushdown=OFF: HAVING句からWHERE句への条件プッシュダウンを無効にします。

loose_having_cond_pushdown_mode

グローバル

HAVING句からWHERE句への条件プッシュダウンを有効にするノードのタイプを指定します。 有効な値:

  • REPLICA_ON (デフォルト): 読み取り専用ノードでのみ、HAVING句からWHERE句への条件プッシュダウンを有効にします。

  • ON: すべてのノードでHAVING句からWHERE句への条件プッシュダウンを有効にします。

  • OFF: すべてのノードでHAVINGからWHERE句への条件プッシュダウンを無効にします。

HAVING句からWHERE句に条件をプッシュダウンします。

例 1:

SELECT t1.a,MAX(t1.b)
t1から
グループBY t1.a
HAVING (t1.a>2) および (MAX(c)>12); 

変換後のクエリ構文:

SELECT t1.a,MAX(t1.b)
t1から
どこ (t1.a>2)
グループBY t1.a
持っている (MAX(c)>12); 

例 2:

SELECT t1.a,MAX(t1.b),t1.c
t1から
グループBY t1.a
持っている ((t1.a=t1.c) AND (t1.a>1)) OR ((t1.a<3) AND (t1.c>3)); 

変換後のクエリ構文:

SELECT t1.a,MAX(t1.b),t1.c
t1から
WHERE ((t1.a=t1.c) AND (t1.a>1)) OR (t1.a<3)
グループBY t1.a
持っている ((t1.a=t1.c) AND (t1.a>1)) OR ((t1.a<3) AND (t1.c>3));