Ketika menjalankan kueri yang melibatkan sejumlah besar data, lapisan SQL mengonsumsi banyak sumber daya komputasi karena membaca data dari lapisan mesin penyimpanan dan melakukan komputasi. Untuk meningkatkan kinerja kueri, PolarDB for MySQL menurunkan predikat ke lapisan mesin penyimpanan. Topik ini menjelaskan fitur penurunan predikat.
Prasyarat
- 8.0.1.1.5 atau lebih baru
- 8.0.2.2.0 atau lebih baru
Untuk informasi lebih lanjut tentang cara memeriksa versi kluster, lihat Kueri versi mesin.
Latar Belakang
Dalam Edisi Komunitas MySQL, kondisi rentang dalam indeks digunakan untuk menentukan rentang data yang dipindai oleh lapisan mesin penyimpanan. Setelah lapisan SQL mendapatkan data dari lapisan mesin penyimpanan, data tersebut difilter ulang berdasarkan kondisi rentang. Proses ini tidak diperlukan, mengonsumsi sumber daya komputasi, dan mencegah komputasi tertentu didorong ke lapisan mesin penyimpanan. Untuk mengatasi masalah ini, PolarDB for MySQL menyediakan fitur penurunan predikat penuh yang menghapus kondisi rentang setelah digunakan untuk memindai data di mesin penyimpanan.
Batasan
ON. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter kluster dan node. | Parameter | Tingkat | Deskripsi |
| ignore_polar_optimizer_rule | Global dan sesi | Menentukan apakah akan menonaktifkan batasan untuk nilai OFFSET. Nilai default: OFF. Nilai valid:
|
Menggunakan fitur penurunan predikat penuh
detach_range_condition dari parameter loose_optimizer_switch untuk mengaktifkan fitur penurunan predikat penuh. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter kluster dan node. | Parameter | Tingkat | Deskripsi |
| loose_optimizer_switch | Global dan sesi | Menentukan apakah akan mengaktifkan fitur optimasi kueri PolarDB. Variabel terkait dengan fitur LIMIT OFFSET pushdown:
|
Pengujian Kinerja
Using where dikembalikan untuk parameter Extra, yang menunjukkan bahwa kondisi rentang dipertahankan. 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: 29.720.232
filtered: 100,00
Extra: Using whereignore_polar_optimizer_rule disetel ke ON, predikat yang menentukan kondisi rentang dihapus setelah digunakan untuk memindai data di mesin penyimpanan. Dalam contoh ini, Q5 dan Q6 dari TPC-H digunakan. Jalankan pernyataan EXPLAIN untuk melihat rencana eksekusi Q5 dan Q6 ketika fitur penurunan predikat penuh diaktifkan. Using index dikembalikan untuk parameter Extra. - 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: 29.720.232 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: 29.720.232 filtered: 100,00 Extra: Using index
Hasil Pengujian
