All Products
Search
Document Center

AnalyticDB:Nonaktifkan\ penurunan\ kondisi\ filter

Last Updated:Mar 29, 2026

AnalyticDB for MySQL mengindeks semua kolom secara default untuk mempercepat penyaringan data. Namun, dalam beberapa kasus, penyaringan berbasis indeks justru menurunkan performa alih-alih meningkatkannya. Dokumen ini menjelaskan kapan harus menonaktifkan penurunan kondisi filter, cara menerapkannya di tingkat kueri atau kluster, serta cara memverifikasi hasilnya.

Menonaktifkan penurunan adalah solusi sementara yang ditargetkan, bukan pengganti desain indeks yang tepat. Jika Anda terus-menerus menghadapi skenario berikut, pertimbangkan untuk meninjau ulang skema tabel dan strategi indeks sebagai solusi jangka panjang.

Kapan harus menonaktifkan pushdown

Nonaktifkan penurunan kondisi filter jika salah satu kondisi berikut berlaku:

  • Kolom dengan kardinalitas rendah — Kolom memiliki sedikit nilai unik sehingga penyaringan mengembalikan sebagian besar data. Dalam kasus ini, indeks memberikan manfaat yang sangat kecil.

  • I/O disk tinggi — Workload Anda sudah membebani I/O disk akibat kueri atau penulisan data. Penyaringan berbasis indeks bersaing untuk sumber daya I/O yang sama dan menurunkan throughput keseluruhan.

  • Beberapa kondisi penurunan kompleks — Beberapa kondisi diturunkan secara simultan dan melibatkan operasi seperti LIKE atau perbandingan string. Hal ini mengonsumsi sumber daya berlebihan pada node penyimpanan.

Nonaktifkan penurunan untuk satu kueri

Gunakan Petunjuk SQL untuk menonaktifkan penurunan kondisi filter pada kolom tertentu dalam satu kueri. Petunjuk ini hanya berlaku untuk kueri tersebut dan tidak berdampak pada kluster.

Sintaksis

Sintaksis bergantung pada versi mesin minor kluster Anda.

Versi 3.1.4 atau lebih baru:

/*+ filter_not_pushdown_columns=[<schema1>.<table1>:<col1>|<col2>;<schema2>.<table2>:<col1>] */

Lebih lama dari versi 3.1.4:

/*+ no_index_columns=[<table1>.<col1>;<col2>,<table2>.<col1>] */

Referensi pemisah:

PemisahMaknaContoh
:Memisahkan nama tabel dari daftar kolomtable01:id|product
|Memisahkan kolom dalam tabel yang samaid|product
;Memisahkan beberapa entri tabeltest01.table01:id;test02.table03:key
Penting

Pada versi 3.1.4 dan lebih baru, gunakan format schema.table untuk mereferensikan tabel lintas database. Hal ini memungkinkan pengoptimal membedakan tabel yang memiliki nama sama di database berbeda. Pada versi sebelumnya, nama tabel harus unik di seluruh database saat menggunakan petunjuk lintas database; jika tidak, petunjuk tersebut dapat secara tidak sengaja memengaruhi tabel tambahan. Untuk memeriksa versi mesin minor kluster Anda, lihat Bagaimana cara melihat versi kluster AnalyticDB for MySQL?. Untuk melakukan upgrade versi, hubungi dukungan teknis.

Contoh

Nonaktifkan pushdown untuk dua kolom dalam satu tabel (v3.1.4+):

/*+ filter_not_pushdown_columns=[test01.table01:id|product] */

Menonaktifkan penurunan untuk kolom id dan product dalam test01.table01.

Nonaktifkan pushdown di dua database (v3.1.4+):

/*+ filter_not_pushdown_columns=[test01.table01:id|product;test02.table03:key] */

Menonaktifkan penurunan untuk id dan product dalam test01.table01, serta key dalam test02.table03.

Lebih awal dari v3.1.4:

/*+ no_index_columns=[table02.id;product,table03.key] */

Menonaktifkan penurunan untuk id dan product dalam table02, serta key dalam table03.

Verifikasi penerapan petunjuk

Setelah menjalankan kueri dengan petunjuk tersebut, pastikan penurunan kondisi filter telah dinonaktifkan dengan memeriksa rencana eksekusi. Lihat Periksa status penurunan di bawah.

Menonaktifkan pushdown untuk semua kueri dalam kluster

Jalankan pernyataan set adb_config untuk menonaktifkan penurunan kondisi filter pada kolom tertentu di seluruh kueri dalam kluster. Pengaturan ini tetap berlaku hingga Anda mengubahnya dan berlaku di seluruh kluster, terlepas dari petunjuk kueri individual.

Sintaksis

Versi 3.1.4 atau lebih baru:

set adb_config filter_not_pushdown_columns=[<schema1>.<table1>:<col1>|<col2>;<schema2>.<table2>:<col1>]

Sebelum versi 3.1.4:

set adb_config no_index_columns=[<table1>.<col1>;<col2>,<table2>.<col1>]

Konvensi pemisah sama seperti pada petunjuk tingkat kueri. Lihat tabel referensi pemisah di atas.

Penting

Aturan penamaan lintas database yang sama berlaku. Pada versi 3.1.4 dan lebih baru, gunakan format schema.table. Pada versi sebelumnya, pastikan nama tabel unik di seluruh database. Untuk memeriksa versi mesin minor kluster Anda, lihat Bagaimana cara melihat versi kluster AnalyticDB for MySQL?. Untuk melakukan upgrade versi, hubungi dukungan teknis.

Contoh

Nonaktifkan penurunan untuk kolom id dalam test02.table02 (v3.1.4+):

set adb_config filter_not_pushdown_columns=[test02.table02:id]

Pengaturan ini memengaruhi semua kueri dalam kluster yang mereferensikan kolom id dalam test02.table02.

Verifikasi penerapan konfigurasi

Setelah menjalankan pernyataan tersebut, pastikan pengaturan telah diterapkan dengan menjalankan kueri representatif dan memeriksa rencana eksekusinya. Lihat Periksa status penurunan di bawah.

Periksa status pushdown

Gunakan rencana eksekusi untuk menentukan apakah kondisi filter sedang diturunkan.

  1. Pada tab Execution Plan, klik stage yang berisi operator TableScan.

    Untuk instruksi navigasi ke tab Execution Plan, lihat Lihat hasil diagnosis.
  2. Klik View Stage Plans.

  3. Pada halaman rencana stage, klik operator TableScan.

  4. Pada bagian Properties di sebelah kanan, cari properti PushedDownFilter. sql-exe-plan-attribute

    • Present — kondisi filter didorong ke bawah.

    • Tidak Hadir — kondisi filter tidak didorong.

Alternatif: periksa melalui operator Filter

Anda juga dapat mengidentifikasi status penurunan langsung dalam rencana eksekusi dengan mencari operator Filter:

  • Kluster mode Elastic — Jika operator Filter muncul dalam rencana eksekusi stage downstream, kondisi filter terkait tidak diturunkan.

  • Kluster mode Reserved — Jika operator Filter muncul dalam rencana stage saat ini, kondisi filter terkait tidak diturunkan.