全部产品
Search
文档中心

PolarDB:Gunakan sintaks ROLLUP untuk mempercepat kueri paralel

更新时间:Jul 06, 2025

Anda dapat menggunakan ROLLUP untuk menghitung hasil statistik dan nilai keseluruhan dari semua data setelah pengelompokan berdasarkan dimensi yang berbeda, hanya dengan satu pernyataan kueri. Topik ini menjelaskan cara menggunakan sintaks ROLLUP.

Prasyarat

Kluster Anda adalah PolarDB for MySQL versi 8.0 dengan revisi 8.0.1.1.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara menanyakan versi kluster, lihat Tanyakan Mesin Kluster.

Sintaks

Sintaks ROLLUP merupakan ekstensi dari sintaks GROUP BY. Anda cukup menambahkan WITH ROLLUP setelah kolom yang ditentukan dalam GROUP BY. Contoh:

SELECT year, country, product, SUM(profit) AS profit
       FROM sales
       GROUP BY year, country, product WITH ROLLUP;

ROLLUP menghasilkan hasil agregasi untuk setiap kolom yang ditentukan dalam GROUP BY, serta menghitung hasil agregasi tingkat lebih tinggi dari kanan ke kiri hingga semua data teragregasi. Pada contoh sebelumnya, total pendapatan dihitung berdasarkan urutan klausa berikut: GROUP BY year, country, product (prioritas tertinggi), GROUP BY year, country (prioritas sekunder), dan GROUP BY year (prioritas terendah). Selanjutnya, total pendapatan dihitung untuk seluruh tabel penjualan. Selama penghitungan total pendapatan untuk tabel, GROUP BY diabaikan.

Opsi ROLLUP menawarkan manfaat berikut:

  • ROLLUP memfasilitasi analisis statistik multi-dimensi dan mengurangi kompleksitas kueri SQL untuk analisis tersebut.

  • ROLLUP meningkatkan efisiensi pemrosesan kueri.

  • ROLLUP memungkinkan server melakukan semua operasi agregasi, sehingga klien hanya perlu mengakses data sekali untuk mengumpulkan statistik. Hal ini mengurangi beban pemrosesan dan lalu lintas jaringan pada klien. Jika ROLLUP tidak digunakan, Anda harus menjalankan beberapa kueri untuk mengumpulkan statistik yang sama.

Uji kinerja kueri paralel setelah ROLLUP digunakan

PolarDB meningkatkan kemampuan kueri paralel dengan menggunakan ROLLUP. Saat ROLLUP digunakan, beberapa thread dapat meng-agregasi data secara paralel untuk menghasilkan hasil agregasi, sehingga meningkatkan efisiensi pelaksanaan pernyataan.

TPC Benchmark H (TPC-H) digunakan untuk pengujian. Pada contoh berikut, kueri SQL pertama diterapkan dengan menambahkan ROLLUP dalam klausa GROUP BY.

Catatan

Pengujian kinerja TPC-H yang dijelaskan dalam topik ini diimplementasikan berdasarkan uji benchmark TPC-H tetapi tidak memenuhi semua persyaratan uji benchmark TPC-H. Oleh karena itu, hasil pengujian tidak dapat dibandingkan dengan hasil yang diterbitkan dari uji benchmark TPC-H.

select
    l_returnflag,
    l_linestatus,
    sum(l_quantity) as sum_qty,
    sum(l_extendedprice) as sum_base_price,
    sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
    sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
    avg(l_quantity) as avg_qty,
    avg(l_extendedprice) as avg_price,
    avg(l_discount) as avg_disc,
    count(*) as count_order
from
    lineitem
where
    l_shipdate <= date_sub('1998-12-01', interval ':1' day)
group by
    l_returnflag,
    l_linestatus
with rollup
order by
    l_returnflag,
    l_linestatus;
  • Ketika kueri paralel dinonaktifkan, waktu eksekusi pernyataan mencapai 318,73 detik.1

  • Setelah kueri paralel diaktifkan, waktu eksekusi pernyataan menjadi 22,30 detik. Efisiensi eksekusi meningkat lebih dari 14 kali.2