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

PolarDB:ウィンドウ関数を使用した並列クエリの高速化

最終更新日:May 30, 2024

ウィンドウ機能は、クエリおよび分析機能を改善するために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) を使用して、次の段階のワーカーにデータが配布されます。 これは、窓関数が並列計算を完了することができ、結果が正しいことを保証する。 最後に、リーダーは結果を要約します。