MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

8.2.2.5 導出条件プッシュダウン最適化

MySQL 8.0.22 以降では、適格なサブクエリーの導出条件プッシュダウンがサポートされています。 SELECT * FROM (SELECT i, j FROM t1) AS dt WHERE i > constant などのクエリーでは、多くの場合、外部 WHERE 条件を導出テーブルにプッシュダウンできます (この場合、SELECT * FROM (SELECT i, j FROM t1 WHERE i > constant) AS dt になります)。 導出テーブルを外部クエリーにマージできない場合 (導出テーブルで集計が使用されている場合など)、外部 WHERE 条件を導出テーブルにプッシュダウンすると、処理する必要がある行数が減り、クエリーの実行が高速化されます。

注記

MySQL 8.0.22 より前では、導出テーブルが実体化されているがマージされていない場合、MySQL はテーブル全体を実体化し、結果のすべての行を WHERE 条件で修飾していました。 これは、導出条件プッシュダウンが有効になっていない場合や、なんらかの理由で採用できない場合にも当てはまります。

次の状況では、外部 WHERE 条件を導出実体化テーブルにプッシュダウンできます:

導出条件プッシュダウンを有効にするには、optimizer_switch システム変数の derived_condition_pushdown フラグ (このリリースで追加) を on (デフォルト設定) に設定する必要があります。 この最適化が optimizer_switch によって無効化されている場合は、DERIVED_CONDITION_PUSHDOWN オプティマイザヒントを使用して特定のクエリーに対して有効化できます。 特定のクエリーの最適化を無効にするには、NO_DERIVED_CONDITION_PUSHDOWN オプティマイザヒントを使用します。

導出テーブル条件プッシュダウン最適化には、次の制限事項および制限事項が適用されます: