All Products
Search
Document Center

PolarDB:Penurunan predikat penuh

Last Updated:Mar 29, 2026

Penurunan predikat penuh menghilangkan penyaringan baris berlebih yang dilakukan MySQL pada lapisan SQL setelah pemindaian indeks berbasis rentang, sehingga mengurangi beban komputasi untuk kueri rentang besar pada PolarDB for MySQL.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster PolarDB for MySQL yang menjalankan versi 8.0

  • Versi revisi 8.0.1.1.5 atau lebih baru, atau 8.0.2.2.0 atau lebih baru

Untuk informasi tentang cara memeriksa versi kluster Anda, lihat Kueri versi mesin.

Cara kerja

Pada MySQL Community Edition, ketika suatu kueri menggunakan kondisi rentang untuk memindai indeks, kondisi tersebut dievaluasi dua kali:

Tanpa penurunan predikat penuh:

  1. Mesin penyimpanan memindai indeks menggunakan kondisi rentang dan mengembalikan baris yang cocok.

  2. Lapisan SQL menyaring ulang baris yang dikembalikan menggunakan kondisi rentang yang sama.

Dengan penurunan predikat penuh:

  1. Mesin penyimpanan memindai indeks menggunakan kondisi rentang dan mengembalikan baris yang cocok.

  2. Kondisi rentang dibuang. Lapisan SQL melewatkan penyaringan ulang karena mesin penyimpanan telah menerapkannya.

Penyaringan ganda ini memboroskan sumber daya komputasi. Penurunan predikat penuh menghapus proses penyaringan berlebih di lapisan SQL tersebut.

Aktifkan penurunan predikat penuh

Gunakan variabel detach_range_condition dari parameter loose_optimizer_switch untuk mengaktifkan atau menonaktifkan penurunan predikat penuh. Untuk informasi selengkapnya, lihat Tentukan parameter kluster dan node.

Verifikasi dengan EXPLAIN

Gunakan bidang Extra dalam output EXPLAIN untuk memastikan apakah penurunan predikat penuh aktif:

Extra nilaiMakna
Using whereLapisan SQL sedang menyaring ulang baris. Penurunan predikat penuh dinonaktifkan.
Using indexLapisan SQL melewatkan penyaringan ulang. Penurunan predikat penuh aktif.

Dinonaktifkan (garis dasar)

Contoh berikut menggunakan skema TPC-H. Dengan detach_range_condition diatur ke off, output EXPLAIN menampilkan Using where, yang menunjukkan bahwa kondisi rentang diterapkan kembali di lapisan SQL (TPC-H Q2).

set @@optimizer_switch='detach_range_condition=off';
EXPLAIN SELECT * FROM lineitem WHERE l_orderkey > 10 AND l_orderkey < 60000000 LIMIT 10000000, 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: lineitem
   partitions: NULL
         type: range
possible_keys: PRIMARY,i_l_orderkey,i_l_orderkey_quantity
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 29720232
     filtered: 100.00
        Extra: Using where

Diaktifkan

Dengan ignore_polar_optimizer_rule diatur ke on, kondisi rentang dibuang setelah pemindaian oleh mesin penyimpanan. Output EXPLAIN menampilkan Using index, yang menunjukkan bahwa lapisan SQL melewatkan penyaringan ulang. Contoh berikut menggunakan TPC-H Q5 dan Q6.

Q5

set @@ignore_polar_optimizer_rule=on;
EXPLAIN SELECT COUNT(*) FROM lineitem WHERE l_suppkey > 10 AND l_suppkey < 50000\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: lineitem
   partitions: NULL
         type: range
possible_keys: i_l_suppkey_partkey,i_l_suppkey
          key: i_l_suppkey
      key_len: 5
          ref: NULL
         rows: 29720232
     filtered: 100.00
        Extra: Using index

Q6

set @@ignore_polar_optimizer_rule=on;
EXPLAIN SELECT COUNT(*) FROM LINEITEM WHERE l_receiptDATE > '1992-01-03' AND l_receiptDATE < '1994-12-31'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: LINEITEM
   partitions: NULL
         type: range
possible_keys: i_l_receiptdate
          key: i_l_receiptdate
      key_len: 4
          ref: NULL
         rows: 29720232
     filtered: 100.00
        Extra: Using index

Hasil pengujian

Gambar berikut menunjukkan perbedaan performa antara mengaktifkan dan menonaktifkan penurunan predikat penuh, diukur menggunakan kueri TPC-H Q5 dan Q6 dengan faktor skala 10.

谓词下推
Keuntungan performa aktual bergantung pada workload, distribusi data, dan konfigurasi kluster Anda. Jalankan benchmark sendiri untuk mengevaluasi dampaknya di lingkungan Anda.