全部产品
Search
文档中心

PolarDB:Periksa apakah IMCI dibuat untuk tabel dalam pernyataan SQL

更新时间:Jul 02, 2025

Prosedur tersimpan dbms_imci.check_columnar_index() dapat mengurai Pernyataan SQL yang dimasukkan, mendapatkan semua kolom yang digunakan dalam pernyataan tersebut, dan memeriksa apakah Indeks Kolom dalam Memori (IMCI) valid untuk kolom-kolom tersebut.

  • Jika kolom tempat IMCI tidak valid terlibat dalam pernyataan SQL, prosedur tersimpan akan mengembalikan nama basis data, nama tabel, dan nama kolom.

  • Jika IMCI valid untuk semua kolom dalam pernyataan SQL, prosedur tersimpan akan mengembalikan set hasil kosong.

Prasyarat

  • Kluster PolarDB Anda menggunakan salah satu versi berikut:

    • Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.30 atau lebih baru.

    • Kluster PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.12 atau lebih baru.

  • Anda memiliki izin baca (SELECT) pada tabel yang ditentukan.

Sintaksis

dbms_imci.check_columnar_index('<query_string>');

Parameter

Parameter

Deskripsi

query_string

Pernyataan SQL yang akan diuraikan.

Catatan
  • Pernyataan SQL harus berupa pernyataan SELECT yang valid. Pernyataan DML lainnya seperti INSERT, UPDATE, atau DELETE tidak didukung. Jika pernyataan SELECT mengandung kesalahan, pesan kesalahan akan dikembalikan. Contohnya, kolom yang tidak ada terlibat.

  • Nilai dari query_string harus berupa string dan tidak dapat berupa nilai variabel atau hasil kueri.

Catatan Penggunaan

  • Prosedur tersimpan ini peka huruf besar-kecil.

  • Saat menggunakan prosedur tersimpan untuk mengurai pernyataan SQL dan menambahkan nama basis data sebelum nama tabel dalam pernyataan SQL, nama basis data tersebut digunakan. Jika tidak ada nama basis data yang ditambahkan sebelum nama tabel dalam pernyataan SQL, Anda harus menjalankan pernyataan use db_name untuk beralih ke basis data yang berisi tabel dalam pernyataan SQL, lalu jalankan prosedur tersimpan.

  • Meskipun tidak ada batasan panjang untuk pernyataan SQL, panjang pernyataan SQL yang dikirim dari klien ke basis data dibatasi oleh parameter thread_stack untuk penguraian pernyataan SQL dan parameter seperti max_allowed_packet.

  • Jika IMCI tidak mendukung tipe data kolom dalam pernyataan SQL, pesan kesalahan akan dikembalikan saat prosedur tersimpan dipanggil.

  • Pernyataan SELECT dapat berupa bentuk parameter dari pernyataan yang disiapkan. Namun, kata kunci PREPARE... FROM tidak dapat ditambahkan.

  • Jika pernyataan SQL mengandung karakter yang perlu diloloskan, seperti ' atau ", Anda harus meloloskan karakter tersebut berdasarkan sintaksis MySQL. Contoh kode:

    • Ganti ' dalam pernyataan SQL dengan ''.

      call dbms_imci.check_columnar_index('select t1.a from t1 where t1.b = ''some_string''');
    • Ganti " dalam pernyataan SQL dengan "".

      call dbms_imci.check_columnar_index("select t1.a from t1 where t1.b = ""some_string""");

    Untuk aturan pelolosan lebih lanjut, lihat Dokumentasi MySQL.

Contoh

Tabel t1, t2, dan t3 digunakan dalam contoh-contoh berikut. Panggil prosedur tersimpan untuk memeriksa apakah IMCI valid untuk semua kolom dalam pernyataan SQL.

  1. Jalankan pernyataan berikut untuk beralih ke basis data test:

    use test;
  2. Jalankan pernyataan berikut untuk membuat tabel t1, t2, dan t3. IMCI valid untuk semua kolom dalam tabel t3.

    create table t1 (a int, b int) engine = innodb;
    create table t2 (a int, b int) engine = innodb;
    create table t3 (a int, b int) engine = innodb comment 'columnar=1';
  3. Panggil prosedur tersimpan untuk memeriksa apakah IMCI valid untuk semua kolom dalam pernyataan SQL.

    • Pernyataan SQL menggunakan kolom dalam tabel t1 dan t2.

      call dbms_imci.check_columnar_index('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');

      Hasil contoh:

      +--------------+------------+-------------+
      | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME |
      +--------------+------------+-------------+
      | test         | t1         | a           |
      | test         | t1         | b           |
      | test         | t2         | a           |
      +--------------+------------+-------------+
      3 baris dalam set (0,01 detik)

      Pernyataan SQL menggunakan kolom t1.a, t1.b, dan t2.a, dan IMCI tidak valid untuk ketiga kolom tersebut. Oleh karena itu, prosedur tersimpan mengembalikan nama basis data, nama tabel, dan nama ketiga kolom tersebut.

    • Kolom dalam pernyataan SQL milik tabel t3.

      call dbms_imci.check_columnar_index('select a, b from t3');

      Hasil contoh:

      Set kosong (0,00 detik)

      IMCI valid untuk semua kolom dalam tabel t3. Oleh karena itu, prosedur tersimpan mengembalikan set hasil kosong.