全部产品
Search
文档中心

PolarDB:Gunakan fungsi jendela untuk mempercepat kueri paralel

更新时间:Jul 06, 2025

Fungsi jendela adalah fitur yang diperkenalkan di Edisi Komunitas MySQL 8.0 untuk meningkatkan kemampuan kueri dan analisis. Fungsi ini sepenuhnya didukung di PolarDB for MySQL 8.0 dan dapat dieksekusi secara paralel.

Prasyarat

  • Kluster Anda harus merupakan PolarDB for MySQL Edisi Kluster 8.0 dengan versi revisi 8.0.2.2.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara menanyakan versi kluster, lihat Tanyakan versi mesin.

  • Hanya fungsi jendela yang menggunakan klausa PARTITION BY yang dapat dieksekusi secara paralel.

Catatan penggunaan

  • Sintaksis

    Di PolarDB, Anda hanya dapat menggunakan pernyataan EXPLAIN FORMAT=TREE untuk memeriksa apakah fungsi jendela digunakan.

  • Contoh

    Dalam contoh berikut, tabel bernama employee_salaries dibuat dan data dimasukkan ke dalam tabel:

    CREATE TABLE `employee_salaries` (
      `dept` varchar(20) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      `salary` int DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    INSERT INTO `employee_salaries` VALUES
    ('Engineering','Dharma',3500),
    ('Engineering','Bình',3000),
    ('Engineering','Adalynn',2800),
    ('Engineering','Samuel',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);

    Contoh berikut menunjukkan rencana eksekusi kueri paralel untuk tabel employee_salaries:

    explain format=tree select ROW_NUMBER() OVER(partition by dept order by salary desc) AS 'row_number' from employee_salaries\G
    *************************** 1. row ***************************
    EXPLAIN:
    -> Gather (slice: 1; workers: 4)  (cost=26.42 rows=12)
        -> Window aggregate  (cost=15.67 rows=3)
            -> Repartition (hash keys: employee_salaries.dept; slice: 2; workers: 4)  (cost=15.33 rows=3)
                -> Sort: employee_salaries.dept, employee_salaries.salary DESC  (cost=1.55 rows=13)
                    -> Parallel table scan on employee_salaries, with parallel partitions: 4

    Dalam rencana eksekusi sebelumnya, setelah tabel employee_salaries dipindai secara paralel, data didistribusikan ke pekerja di tahap berikutnya oleh kunci (employee_salaries.dept) yang ditentukan dalam klausa Partition By. Ini memastikan bahwa fungsi jendela dapat menyelesaikan komputasi paralel dan hasilnya benar. Terakhir, pemimpin merangkum hasil.