ウィンドウ機能は、クエリおよび分析機能を改善するためにMySQL Community Edition 8.0で導入された機能です。 Window関数はPolarDB for MySQL 8.0で完全にサポートされており、並行して実行できます。
前提条件
お使いのクラスターはPolarDB for MySQL cluster Edition 8.0で、リビジョンバージョンは8.0.2.2.0以降です。 クラスターのバージョンを照会する方法の詳細については、「エンジンバージョンの照会」をご参照ください。
PARTITION BY句を使用するウィンドウ関数のみを並列に実行できます。
使用上の注意
構文
PolarDBでは、
EXPLAIN FORMAT=TREE
文のみを使用して、ウィンドウ関数が使用されているかどうかを確認できます。例
次の例では、
employte_salaries
という名前のテーブルが作成され、データがテーブルに挿入されます。CREATE TABLE 'employte_salaries '( 'dept' varchar(20) DEFAULT NULL、 'name' varchar(20) DEFAULT NULL、 'salary' int DEFAULT NULL ) エンジン=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 「従業員_給与」の価値に挿入する ('Engineering' 、'Dharma' 、3500) 、('Engineering' 、'B ì nh' 、3000) 、('Engineering' 、'Adalynn '、2800) 、(「エンジニア」、「サミュエル」、2500) 、('Engineering' 、'Cveta' 、2200) 、('Engineering' 、'eve' 、2000) 、('Engineering' 、'Dharma' 、3500) 、('Sales '、'Carbry' 、500) 、('Sales '、'Clytemnestra' 、400) 、('Sales '、'Juraj' 、300) 、('Sales '、'Kalpana' 、300) 、('Sales '、'Svantepolk' 、250) 、('Sales '、'Angelo' 、200);
次の例は、
employte_salaries
テーブルの並列クエリ実行プランを示しています。explain format=tree select ROW_NUMBER() OVER(partition by dept order by salary desc) AS 'row_number' from employee_salaries\G *************************** 1。 行 *************************** 説明: -> 収集 (スライス: 1; ワーカー: 4) (コスト=26.42行=12) -> ウィンドウ集計 (コスト=15.67行=3) -> 再分割 (ハッシュキー: employee_salaries.dept; slice: 2; workers: 4) (コスト=15.33行=3) -> 並べ替え: employee_salaries.dept、employee_salaries.salary DESC (コスト=1.55行=13) -> 並列パーティションを持つemployee_salariesの並列テーブルスキャン: 4
上記の実行計画では、
employte_salaries
テーブルが並行してスキャンされた後、Partition by句で指定されたキー (employee_salaries.dept
) を使用して、次の段階のワーカーにデータが配布されます。 これは、窓関数が並列計算を完了することができ、結果が正しいことを保証する。 最後に、リーダーは結果を要約します。