全部产品
Search
文档中心

PolarDB:Turunkan kondisi dari klausa HAVING ke klausa WHERE

更新时间:Jul 06, 2025

PolarDB memungkinkan Anda menurunkan kondisi dari klausa HAVING dalam kueri SQL ke klausa WHERE. Untuk meningkatkan performa kueri, transformasikan kueri SQL yang kompleks dengan menurunkan kondisi yang sesuai untuk penyaringan lebih awal dari HAVING ke WHERE.

Versi yang didukung

Kluster Anda menjalankan salah satu versi mesin database berikut. Untuk informasi lebih lanjut tentang cara melihat versi kluster, lihat Kueri versi mesin.

  • MySQL 8.0.1 dengan versi revisi 8.0.1.1.42 atau lebih baru.

  • MySQL 8.0.2 dengan versi revisi 8.0.2.2.10 atau lebih baru.

Batasan

  • Jika suatu kondisi (atau sebagian dari kondisi) hanya bergantung pada bidang yang digunakan dalam klausa GROUP BY, atau bidang yang identik dengan bidang yang dikelompokkan, kondisi tersebut dapat diturunkan dari klausa HAVING ke klausa WHERE.

  • Fungsi agregat tidak dapat diturunkan.

Latar Belakang

Klausa HAVING digunakan dalam banyak kueri kompleks untuk menyaring hasil pengelompokan. Umumnya, kondisi pada klausa HAVING diterapkan ke data terkelompok yang dihasilkan oleh operasi GROUP BY. Kondisi dalam klausa HAVING yang sesuai untuk penyaringan lebih awal dapat dipindahkan ke klausa WHERE. Hal ini mengurangi jumlah data yang diproses pada tahap akhir kueri, sehingga meningkatkan performa dan efisiensi secara signifikan.

Penggunaan

Gunakan parameter loose_polar_optimizer_switch untuk mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE. Parameter loose_having_cond_pushdown_mode dapat digunakan untuk menentukan node tempat fitur ini diaktifkan. Untuk informasi lebih lanjut tentang konfigurasi parameter, lihat Konfigurasikan parameter kluster dan node.

Parameters

Parameter

Level

Deskripsi

loose_polar_optimizer_switch

Global dan sesi

Menentukan apakah akan mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE. Nilai valid:

  • having_cond_pushdown=ON (default): mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE.

  • having_cond_pushdown=OFF: menonaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE.

loose_having_cond_pushdown_mode

Global

Menentukan jenis node tempat Anda ingin mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE. Nilai valid:

  • REPLICA_ON (default): mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE hanya pada node baca saja.

  • ON: mengaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE pada semua node.

  • OFF: menonaktifkan penurunan kondisi dari klausa HAVING ke klausa WHERE pada semua node.

Contoh

Menurunkan kondisi dari klausa HAVING ke klausa WHERE.

Contoh 1:

SELECT t1.a,MAX(t1.b)
FROM t1
GROUP BY t1.a
HAVING (t1.a>2) AND (MAX(c)>12);

Sintaks kueri setelah transformasi:

SELECT t1.a,MAX(t1.b)
FROM t1
WHERE (t1.a>2)
GROUP BY t1.a
HAVING (MAX(c)>12);

Contoh 2:

SELECT t1.a,MAX(t1.b),t1.c
FROM t1
GROUP BY t1.a
HAVING ((t1.a=t1.c) AND (t1.a>1)) OR ((t1.a<3) AND (t1.c>3));

Sintaks kueri setelah transformasi:

SELECT t1.a,MAX(t1.b),t1.c
FROM t1
WHERE ((t1.a=t1.c) AND (t1.a>1)) OR (t1.a<3)
GROUP BY t1.a
HAVING ((t1.a=t1.c) AND (t1.a>1)) OR ((t1.a<3) AND (t1.c>3));