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

PolarDB:左結合の削除

最終更新日:Jun 04, 2024

PolarDBは、左結合の削除機能をサポートしています。 複雑なクエリの場合、この機能を使用してSQLクエリを変換し、不要な左結合サブクエリを削除できます。 これにより、SQLクエリのパフォーマンスが向上します。

前提条件

リビジョンバージョンが次のPolarDB for MySQL 8.0のクラスター。

  • 8.0.1.1.32以降

  • 8.0.2.2.10以降

制限

左結合の削除機能を使用するには、次の要件を満たす必要があります。

  • 左側のテーブルのデータの行では、右側のテーブルの1行のみが結合条件を満たすことができます。

  • 左結合サブクエリを除いて、右のテーブルのデータは現在のSQLステートメントで参照されません。

背景情報

左結合は、複雑な分析クエリで広く使用されており、SQLクエリで最も時間のかかる演算子です。 結合操作は、左右のテーブルの指定された列を結合し、結果を外部クエリに結合します。 これは、クエリを複雑にする。 不要な結合操作を排除すると、クエリのパフォーマンスが大幅に向上します。

使用法

loose_join_elimination_modeパラメーターを使用して、左結合除去機能を有効にできます。 詳細については、「クラスターパラメーターとノードパラメーターの指定」をご参照ください。

パラメーター

レベル

説明

loose_join_elimination_モード

グローバル

左結合の削除機能を有効にするかどうかを指定します。 デフォルト値: REPLICA_ON。 有効な値:

  • ON: 左結合除去機能を有効にします。

  • REPLICA_ON: 読み取り専用ノードに対してのみ、左結合の削除機能を有効にします。

  • OFF: 左結合除去機能を無効にします。

元のクエリ

元のクエリでは、table1table2table3左結合です。 元のクエリには7.5秒かかります。

説明
SELECTカウント (*)
FROM 'table1' 'sc'
  'table2' 'ca' ON 'sc'.'car_id' = 'ca'.'id' に参加してください。
  LEFT JOIN 'table3' 'co' ON 'sc'.'company_id' = 'co'.'id';

---- ----------- -------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---- ----------- -------------------------------------------------------------------------------------
| 1 | SIMPLE | sc | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 2 | 100.00 | NULL |
| 1 | SIMPLE | ca | NULL | eq_ref | PRIMARY | PRIMARY | 4 | je_test.sc.car_id | 1 | 100.00 | インデックスの使用 |
| 1 | SIMPLE | co | NULL | eq_ref | PRIMARY | PRIMARY | 4 | je_test.sc.company_id | 1 | 100.00 | インデックスの使用 |
---- ----------- -------------------------------------------------------------------------------------------------------------------

table1の主キーは、table2table3を結合する条件で使用され、クエリ結果で一意の行を確保します。 table2またはtable3の列は投影で参照されないため、左結合を削除できます。

最適化されたクエリ

説明
SELECTカウント (*)
FROM 'table1' 'sc'

--- ------------ ---------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
--- ------------ ---------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | sc | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 2 | 100.00 | NULL |
--- ------------ -------------------------------------------------------------------------------------------------------------------

上記のクエリは、table2table3の結合後にtable1レコードのみがクエリされることを示しています。 これにより、コンピューティングリソースが大幅に節約され、実行効率が向上します。 最適化されたクエリには0.1秒かかります。これは、元のクエリの1/75です。