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=TREEuntuk memeriksa apakah fungsi jendela digunakan.Contoh
Dalam contoh berikut, tabel bernama
employee_salariesdibuat 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: 4Dalam rencana eksekusi sebelumnya, setelah tabel
employee_salariesdipindai 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.