Panggil dbms_imci.columnar_advise() atau dbms_imci.columnar_advise_by_columns() untuk menghasilkan pernyataan DDL yang diperlukan guna membuat In-Memory Columnar Index (IMCI) untuk kueri tertentu. Kedua prosedur tersimpan tersebut hanya mengembalikan pernyataan DDL—tidak mengeksekusinya. Setelah menjalankan pernyataan DDL yang dikembalikan, ulangi proses ini jika masih terdapat kolom yang tidak valid hingga semua kolom yang terlibat dalam kueri memiliki IMCI yang valid.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.30 atau lebih baru
Izin SELECT pada tabel target
Prosedur
Pilih prosedur berdasarkan cakupan penerapan IMCI yang diinginkan:
| Prosedur | Cakupan | Gunakan saat |
|---|---|---|
dbms_imci.columnar_advise() | Semua kolom dalam tabel yang dikueri | Anda menginginkan cakupan kolom penuh pada setiap tabel yang disentuh oleh kueri |
dbms_imci.columnar_advise_by_columns() | Hanya kolom yang dirujuk dalam kueri | Anda menginginkan IMCI terarah yang dibatasi hanya pada kolom yang benar-benar digunakan oleh kueri |
Sintaksis
Dapatkan pernyataan DDL untuk membuat IMCI pada semua kolom dalam tabel yang dikueri:
CALL dbms_imci.columnar_advise('<query_string>');Dapatkan pernyataan DDL untuk membuat IMCI hanya pada kolom spesifik yang dirujuk dalam kueri:
CALL dbms_imci.columnar_advise_by_columns('<query_string>');Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
query_string | String literal | Pernyataan SQL yang akan dianalisis. Harus berupa pernyataan SELECT yang valid — pernyataan INSERT, UPDATE, dan DELETE tidak didukung. Harus berupa string literal, bukan variabel atau hasil kueri. Jika pernyataan SELECT merujuk kolom yang tidak ada, kesalahan akan dikembalikan. |
Contoh
Contoh berikut menggunakan dua tabel, t1 dan t2, dalam database test.
Siapkan tabel contoh:
USE test;
CREATE TABLE t1 (a INT, b INT) ENGINE = InnoDB;
CREATE TABLE t2 (a INT, b INT) ENGINE = InnoDB;Dapatkan DDL untuk semua kolom dalam tabel yang dikueri
Panggil dbms_imci.columnar_advise() dengan kueri target:
CALL dbms_imci.columnar_advise('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');Contoh output:
+-------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------+
| ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
| ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
+-------------------------------------------+
2 rows in set (0.00 sec)Output berisi satu pernyataan DDL per tabel. Setiap pernyataan mengaktifkan IMCI untuk semua kolom dalam tabel tersebut. Eksekusi pernyataan-pernyataan ini untuk membuat IMCI.
Dapatkan DDL untuk kolom spesifik yang dirujuk dalam kueri
Panggil dbms_imci.columnar_advise_by_columns() dengan kueri yang sama:
CALL dbms_imci.columnar_advise_by_columns('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');Contoh output:
+-------------------------------------------------------------------------------------------------------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
| ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
+-------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)Karena kueri hanya merujuk t1.a, t1.b, dan t2.a, output hanya membuat IMCI untuk ketiga kolom tersebut. Eksekusi pernyataan-pernyataan ini untuk mengaktifkan IMCI pada kolom-kolom yang tepat digunakan oleh kueri.
Iterasi hingga semua kolom valid
Setelah mengeksekusi pernyataan DDL, beberapa kolom mungkin masih memiliki status IMCI yang tidak valid. Panggil kembali prosedur tersimpan yang sama dengan kueri yang sama untuk mendapatkan pernyataan DDL terbaru, lalu eksekusi pernyataan tersebut. Ulangi siklus ini hingga prosedur tersimpan tidak lagi mengembalikan pernyataan tambahan dan IMCI menjadi valid untuk semua kolom yang digunakan oleh kueri.