PolarDB for MySQL mendukung fitur WHERE ke tabel turunan. Fitur ini digunakan untuk mentransformasi kueri SQL kompleks yang memenuhi kondisi tertentu. Jika tabel turunan tidak dapat digabungkan ke dalam kueri luar, kondisi WHERE luar akan diturunkan ke tabel turunan untuk mengurangi jumlah baris yang diproses oleh pernyataan SQL, sehingga meningkatkan performa kueri.
Versi yang didukung
Kluster Anda menjalankan salah satu versi mesin database berikut. Untuk informasi lebih lanjut tentang cara melihat versi kluster, lihat Memeriksa 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 semua kolom atau kolom ekuivalen dalam ekspresi kondisional berasal dari tabel turunan yang dimaterialisasi, kondisi tersebut dapat diturunkan ke tabel materialisasi.
Jika batasan diberlakukan pada tabel turunan yang dimaterialisasi, kondisi tidak dapat diturunkan.
Jika situasi berikut terjadi di kolom ekspresi kondisional WHERE luar atau kolom yang dipetakan ke tabel yang dimaterialisasi, kondisi tidak dapat diturunkan:
Nilai di kolom tersebut dihasilkan oleh subkueri atau bersifat non-deterministik, artinya hasil yang berbeda mungkin dihasilkan di bawah kondisi input yang sama.
Kolom tersebut adalah prosedur tersimpan atau fungsi penyimpanan.
Informasi latar belakang
Dalam skenario yang melibatkan kueri kompleks, database perlu menyediakan kemampuan penurunan yang kuat untuk mempercepat kueri. PolarDB for MySQL meningkatkan fitur WHERE ke tabel turunan berdasarkan fitur penurunan kondisi Edisi Komunitas MySQL untuk memberikan kemampuan penurunan yang lebih baik. Peningkatan ini mencakup aspek-aspek berikut:
Kondisi ekuivalen dapat dipindahkan.
Jika tabel turunan adalah gabungan (union), kondisi yang memenuhi persyaratan tertentu dapat diturunkan ke bagian yang sesuai dari gabungan.
Fitur WHERE ke Tabel Turunan dapat digunakan bersama dengan fitur HAVING ke WHERE untuk menurunkan lebih jauh kondisi yang diturunkan berdasarkan hubungan ekuivalensi.
Penggunaan
Anda dapat mengonfigurasi parameter loose_derived_cond_pushdown_mode untuk menurunkan kondisi WHERE ke tabel turunan. Tabel berikut menjelaskan parameter ini. Untuk informasi lebih lanjut, lihat Mengonfigurasi Parameter Kluster dan Node.
Anda juga dapat menjalankan perintah berikut untuk menurunkan kondisi WHERE ke tabel turunan dalam koneksi basis data tingkat sesi:
SET optimizer_switch="derived_condition_pushdown=on";
SET derived_cond_pushdown_mode=on;Parameter
Parameter | Tingkat | Deskripsi |
loose_derived_cond_pushdown_mode | Global | Menentukan apakah akan menurunkan kondisi WHERE ke tabel turunan. Nilai valid:
|
Contoh
Menurunkan kondisi dari klausa WHERE ke tabel turunan.
Contoh 1:
SELECT *
FROM t1, (
SELECT x
FROM t2
GROUP BY x
) d_tab, t2
WHERE t1.a = d_tab.x
AND t1.a > 6;Hasil Sampel:
SELECT *
FROM t1, (
SELECT x
FROM t2
WHERE x > 6
GROUP BY x
) d_tab
WHERE t1.a = d_tab.x
AND t1.a > 6;Contoh 2:
SELECT f1
FROM (
SELECT (
SELECT f1
FROM t1
LIMIT 1
) AS f1
FROM t1
UNION
SELECT f2
FROM t2
) dt
WHERE f1 = 1;Hasil Sampel:
SELECT f1
FROM (
SELECT (
SELECT f1
FROM t1
LIMIT 1
) AS f1
FROM t1
UNION
SELECT f2
FROM t2
WHERE f2 = 1
) dt
WHERE f1 = 1;Contoh 3:
SELECT *
FROM (
SELECT f1, f2
FROM t1
) dt
GROUP BY f1
HAVING f1 < 3
AND f2 > 11
AND MAX(f3) > 12;Hasil Sampel:
SELECT *
FROM (
SELECT f1, f2
FROM t1
WHERE f1 < 3
) dt
WHERE f1 < 3
GROUP BY f1
HAVING f2 > 11
AND MAX(f3) > 12;