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
ROLLUPtidak 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.
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.

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