Fitur PolarDB for MySQL In-Memory Column Index (IMCI) dirancang untuk mempercepat kueri pemrosesan analitis (AP) secara signifikan. Sebelum menggunakan fitur ini, pastikan Anda memahami batasannya agar kueri SQL dapat dipercepat dengan benar oleh IMCI dan menghasilkan output yang diharapkan.
Batasan umum
Sebelum menggunakan IMCI, pastikan lingkungan kluster dan skema tabel Anda memenuhi persyaratan berikut:
Mesin penyimpanan: IMCI hanya dapat dibuat untuk tabel yang menggunakan mesin penyimpanan
InnoDB.Tabel sementara: IMCI tidak dapat digunakan untuk mempercepat kueri pada tabel sementara.
Kolom virtual: IMCI dapat dibuat pada kolom virtual jika kondisi berikut terpenuhi:
Parameter kluster
imci_enable_virtual_columndiatur keON.CatatanParameter ini bersifat tingkat sesi dan tidak dapat dimodifikasi di Konsol.
order_keytidak ditentukan saat membuat IMCI.
Tipe kolom virtual: IMCI tidak dapat dibuat pada kolom virtual bertipe data Spatial.
Multi-master Cluster (Limitless) Edition: Anda harus terlebih dahulu memodifikasi parameter kluster untuk mengatur parameter
loose_polar_enable_imci_with_mmmenjadiON. Setelah itu, Anda dapat menambahkan node read-only IMCI global dan menggunakan fitur IMCI.
Batasan untuk pernyataan SELECT
IMCI hanya digunakan untuk mempercepat kueri SELECT. Jika suatu pernyataan kueri mengandung struktur apa pun berikut ini, seluruh kueri tidak dapat dipercepat oleh IMCI dan akan kembali menggunakan penyimpanan baris untuk eksekusi:
Pernyataan
SELECTyang menggunakan pembacaan terkunci, sepertiSELECT ... FOR UPDATEatauSELECT ... FOR SHARE.Pernyataan
SELECTyang mengandung fungsi jendela dengan klausa frame, misalnya klausa sepertiROWS UNBOUNDED PRECEDINGdalam klausaOVER().SELECT time, subject, val, SUM(val) OVER ( PARTITION BY subject ORDER BY time ROWS UNBOUNDED PRECEDING --- Definisi frame dalam fungsi jendela. IMCI tidak mendukung ini. ) AS running_total FROM observations;Pernyataan
SELECTyang mengandung subkueri dalam klausaGROUP BY, contohnya:SELECT SUM(a) FROM t1 GROUP BY (SELECT ... FROM ...) as some_subquery;Pernyataan
SELECTyang mengandung subkueri dalam ekspresi klausaORDER BY, contohnya:SELECT a FROM t1 ORDER BY (SELECT ... FROM ...) as some_subquery;Pernyataan
SELECTyang mengandung subkueri berkorelasi, di mana korelasinya merupakan bagian dari kondisiONdalam klausaJOINdi dalam subkueri tersebut, contohnya:WHERE t1.a in (SELECT t2.a FROM t2 INNER JOIN t3 on t2.a = t3.a AND t2.b > t1.b);Pernyataan
SELECTyang mengandung subkueri yang menggunakan fungsi jendela dan memiliki kolom berkorelasi dalam klausaHAVING.Pernyataan SELECT yang mengandung subkueri yang menggunakan operator
UNION, dan salah satu pernyataanSELECTdi dalamUNIONberkorelasi dengan query luar.
Batasan ekspresi dan fungsi
Jika suatu pernyataan SELECT mengandung ekspresi atau fungsi yang tidak didukung, seluruh kueri akan kembali menggunakan penyimpanan baris untuk eksekusi.
Ekspresi perbandingan
Ekspresi | Apakah saya dapat menggunakan indeks penyimpanan kolom? | Catatan |
| Jika | |
| Jika | |
| Jika parameter input mencakup tipe | |
| Jika | |
| Jika parameter input mencakup tipe | |
| - |
Ekspresi string
Ekspresi | Dukungan indeks penyimpanan kolom | Catatan |
| - | |
| - | |
| - | |
| Saat menggunakan fitur IMCI, fungsi ini hanya mendukung satu parameter. Dua parameter tidak didukung. |
Ekspresi fungsi agregat
Ekspresi | Apakah indeks penyimpanan kolom didukung? |
|
Ekspresi enkripsi dan kompresi
Ekspresi | Dukungan indeks penyimpanan kolom |
| |
| |
| |
| |
| |
| |
| |
| |
|
Fungsi JSON
Fungsi | Apakah indeks penyimpanan kolom didukung? |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
Fungsi spasial
Fungsi | Apakah indeks penyimpanan kolom didukung? |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|