Topik ini menjelaskan cara dan situasi penggunaan kondisi filter tanpa penurunan.
Ikhtisar
Secara default, AnalyticDB for MySQL membuat indeks untuk semua kolom saat pembuatan tabel, meningkatkan efisiensi penyaringan data. Namun, dalam beberapa skenario, penggunaan indeks mungkin tidak memberikan efisiensi penyaringan yang optimal atau bahkan menurunkan kinerja keseluruhan. Dalam kasus seperti itu, disarankan untuk tidak menggunakan indeks dalam penyaringan data. Meskipun Anda dapat menghapus indeks secara manual untuk beberapa kolom, hal ini dapat menyebabkan ketiadaan indeks ketika dibutuhkan. AnalyticDB for MySQL mendukung kondisi filter tanpa penurunan untuk sementara memblokir kemampuan penurunan kondisi filter pada level kueri atau kluster, sehingga meningkatkan efisiensi kueri keseluruhan.
- Jumlah nilai unik yang kecil. Ini berarti sejumlah besar data dikembalikan setelah penyaringan. Dalam hal ini, indeks mungkin tidak cocok untuk penyaringan data.
- Penggunaan disk I/O yang tinggi. Jika banyak sumber daya I/O digunakan karena karakteristik kueri atau penulisan data, indeks yang digunakan untuk penyaringan dapat menyebabkan persaingan untuk sumber daya disk I/O dan menurunkan efisiensi penyaringan.
- Penurunan beberapa kondisi. Jika beberapa kondisi diturunkan dan mencakup operasi kompleks seperti LIKE dan perbandingan string, sejumlah besar sumber daya pada node penyimpanan akan dikonsumsi, mempengaruhi kinerja keseluruhan.
Periksa apakah kondisi filter diturunkan
Anda dapat memeriksa apakah kondisi filter diturunkan di halaman eksekusi.
- Pada tab Execution Plan, klik tahap yang berisi operator TableScan.Catatan Untuk informasi lebih lanjut tentang cara menuju ke tab Execution Plan, lihat Lihat Hasil Diagnosis.
- Klik View Stage Plans.
- Di halaman rencana tahap, klik operator TableScan.
- Di bagian Properties di sebelah kanan, periksa apakah properti PushedDownFilter ditampilkan. Jika kondisi filter diturunkan, properti tersebut akan ditampilkan; jika tidak, properti tersebut tidak akan muncul.
Catatan Anda juga dapat memeriksa apakah kondisi filter diturunkan melalui rencana eksekusi.- Untuk kluster dalam mode elastis, periksa apakah operator Filter ditampilkan dalam rencana eksekusi tahap hilir. Jika operator Filter ditampilkan, kondisi filter terkait dengan operator tersebut tidak diturunkan.
- Untuk kluster dalam mode cadangan, periksa apakah operator Filter ditampilkan dalam rencana tahap saat ini. Jika operator Filter ditampilkan, kondisi filter terkait dengan operator tersebut tidak diturunkan.
Nonaktifkan penurunan kondisi filter untuk kolom tertentu dalam kueri
Dalam kueri tertentu, Anda dapat menggunakan petunjuk untuk menonaktifkan penurunan kondisi filter untuk kolom tertentu. Operasi ini hanya berlaku untuk kueri yang menggunakan petunjuk.
Sintaksis
- Jika versi mesin minor adalah 3.1.4 atau lebih baru, gunakan petunjuk berikut:
/*+ filter_not_pushdown_columns=[Schema1.table1:colName1|colName2;Schema2.table2:colName1|colName2] */ - Jika versi mesin minor lebih lama dari 3.1.4, gunakan petunjuk berikut:
/*+ no_index_columns=[table1.colName1;colName2,table2.colName1] */
- Saat menonaktifkan penurunan kondisi filter untuk kolom tertentu, Anda dapat menggunakan petunjuk untuk tabel dalam database yang sama atau lintas database. Di versi sebelum 3.1.4, pastikan nama tabel unik di seluruh database saat menggunakan petunjuk lintas database. Jika tidak, petunjuk tersebut dapat memengaruhi tabel tambahan. Di versi 3.1.4 atau lebih baru, Anda dapat menggunakan petunjuk untuk tabel dengan nama yang sama di seluruh database karena format Schema.table membedakan tabel.
- Untuk informasi lebih lanjut tentang cara melihat versi mesin minor kluster, lihat Bagaimana Cara Saya Melihat Versi Minor Kluster? Untuk memperbarui versi mesin minor kluster, hubungi dukungan teknis.
Contoh
- Contoh 1:Dalam contoh ini, versi mesin minor adalah 3.1.4 atau lebih baru. Dalam kueri saat ini, kondisi filter yang berisi kolom
iddanproductdi tabeltable01dari databasetest01tidak diturunkan./*+ filter_not_pushdown_columns=[test01.table01:id|product] */ - Contoh 2:Dalam contoh ini, versi mesin minor adalah 3.1.4 atau lebih baru. Dalam kueri saat ini, kondisi filter yang berisi kolom
iddanproductdi tabeltable01dari databasetest01serta kolomkeydi tabeltable03dari databasetest02tidak diturunkan./*+ filter_not_pushdown_columns=[test01.table01:id|product;test02.table03:key] */ - Contoh 3:Dalam contoh ini, versi mesin minor adalah 3.1.4 atau lebih baru. Dalam kueri saat ini, kondisi filter yang berisi kolom
iddanproductdi tabeltable02serta kolomkeydi tabeltable03tidak diturunkan./*+ no_index_columns=[table02.id;product,table03.key] */
Nonaktifkan penurunan kondisi filter untuk kolom tertentu dalam kluster
Anda dapat mengeksekusi pernyataan berikut untuk menonaktifkan penurunan kondisi filter untuk kolom tertentu di semua kueri kluster saat ini.
Sintaksis
- Saat menonaktifkan penurunan kondisi filter untuk kolom tertentu, Anda dapat menggunakan petunjuk untuk tabel dalam database yang sama atau lintas database. Di versi sebelum 3.1.4, pastikan nama tabel unik di seluruh database saat menggunakan petunjuk lintas database. Jika tidak, petunjuk tersebut dapat memengaruhi tabel tambahan. Di versi 3.1.4 atau lebih baru, Anda dapat menggunakan petunjuk untuk tabel dengan nama yang sama di seluruh database karena format Schema.table membedakan tabel.
- Untuk informasi lebih lanjut tentang cara melihat versi mesin minor kluster, lihat Bagaimana Cara Saya Melihat Versi Minor Kluster? Untuk memperbarui versi mesin minor kluster, hubungi dukungan teknis.
Contoh
Dalam contoh ini, versi mesin minor adalah 3.1.4 atau lebih baru. Dalam semua kueri kluster saat ini, kondisi filter yang berisi kolom id di tabel table02 dari database test02 tidak diturunkan.
set adb_config filter_not_pushdown_columns=[test02.table02:id]