全部产品
Search
文档中心

PolarDB:Menurunkan kondisi dari klausa WHERE ke tabel turunan

更新时间:Jul 06, 2025

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.

Catatan

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:

  • OFF: Fitur WHERE ke tabel turunan dinonaktifkan.

  • ON: Fitur WHERE ke tabel turunan diaktifkan.

  • REPLICA_ON (default): Fitur WHERE ke tabel turunan hanya diaktifkan pada node baca saja.

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;