全部产品
Search
文档中心

PolarDB:Batch obtain the DDL statements used to create IMCIs

更新时间:Jul 02, 2025

Dalam beberapa skenario, Anda perlu membuat IMCI untuk layanan atau modul, bukan hanya untuk kolom yang terlibat dalam satu atau lebih pernyataan SELECT. Untuk menghindari pembuatan IMCI berulang kali, Anda dapat memanggil prosedur tersimpan dbms_imci.columnar_advise_begin(), lalu menjalankan prosedur tersimpan dbms_imci.columnar_advise() secara batch. Terakhir, panggil prosedur tersimpan dbms_imci.columnar_advise_show() untuk mendapatkan pernyataan DDL secara batch.

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.columnar_advise_begin()

    Prosedur tersimpan dbms_imci.columnar_advise_begin() digunakan untuk mengaktifkan metode pengambilan pernyataan DDL secara batch. Saat prosedur tersimpan dbms_imci.columnar_advise() dipanggil, pernyataan DDL tidak langsung ditampilkan tetapi disimpan di memori. Nama tabel dan kolom duplikat tidak dicatat selama penyimpanan. Setelah itu, Anda dapat memanggil prosedur tersimpan dbms_imci.columnar_advise_show() atau dbms_imci.columnar_advise_show_by_columns() untuk mendapatkan pernyataan DDL secara eksplisit.

    Catatan

    Memanggil prosedur tersimpan dbms_imci.columnar_advise_begin() dan dbms_imci.columnar_advise_by_columns() secara berurutan setara dengan memanggil prosedur tersimpan dbms_imci.columnar_advise().

  • dbms_imci.columnar_advise_show()

    Menampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan dbms_imci.columnar_advise() berdasarkan tabel. Nama tabel duplikat tidak ditampilkan.

  • dbms_imci.columnar_advise_show_by_columns()

    Menampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan dbms_imci.columnar_advise() berdasarkan kolom. Nama kolom duplikat tidak ditampilkan.

  • dbms_imci.columnar_advise_end()

    Mengakhiri metode pengambilan pernyataan DDL secara batch dan membersihkan cache. Anda dapat memanggil prosedur tersimpan dbms_imci.columnar_advise_show() dan dbms_imci.columnar_advise_show_by_columns() berulang kali sebelum memanggil prosedur tersimpan dbms_imci.columnar_advise_end(). Jika Anda memanggil prosedur tersimpan dbms_imci.columnar_advise_show() setelah prosedur tersimpan dbms_imci.columnar_advise_end(), pesan kesalahan akan dikembalikan.

Perhatian

  • Memori maksimum untuk menyimpan hasil antara dari dbms_imci.columnar_advise() ditentukan oleh parameter imci_columnar_advise_buffer_size. Nilai defaultnya adalah 8 MB, yang biasanya cukup untuk menyimpan pernyataan DDL untuk ribuan tabel. Jika Anda ingin menyimpan lebih banyak pernyataan DDL, Anda dapat mengeksekusi pernyataan SET untuk mengubah parameter imci_columnar_advise_buffer_size. Contoh: SET imci_columnar_advise_buffer_size = 16777216;.

  • Bahkan jika prosedur tersimpan dbms_imci.columnar_advise_end() tidak dipanggil, cache dbms_imci.columnar_advise() dibersihkan saat koneksi terputus.

Contoh

Tabel t1 dan t2 digunakan dalam contoh-contoh berikut.

  1. Eksekusi pernyataan berikut untuk beralih ke database test:

    use test;
  2. Eksekusi pernyataan berikut untuk membuat tabel t1 dan t2:

    create table t1 (a int, b int) engine = innodb;
    create table t2 (a int, b int) engine = innodb;
  3. Aktifkan metode untuk mendapatkan pernyataan DDL secara batch.

    call dbms_imci.columnar_advise_begin();
  4. Eksekusi prosedur tersimpan dbms_imci.columnar_advise() secara batch.

    call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');
    call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');
    call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');
    call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');
  5. Dapatkan pernyataan DDL secara eksplisit.

    • Tampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan dbms_imci.columnar_advise() berdasarkan tabel.

      call dbms_imci.columnar_advise_show();

      Hasil sampel:

      +-------------------------------------------+
      | DDL_STATEMENT                             |
      +-------------------------------------------+
      | ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
      | ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
      +-------------------------------------------+
      2 rows in set (0.00 sec)
    • Tampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan dbms_imci.columnar_advise() berdasarkan kolom.

       call dbms_imci.columnar_advise_show_by_columns();

      Hasil sampel:

      +-------------------------------------------------------------------------------------------------------------------------------------------+
      | 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)
  6. Hentikan metode untuk mendapatkan pernyataan DDL secara batch dan bersihkan cache.

    call dbms_imci.columnar_advise_end();

    Hasil sampel:

    Query OK, 0 rows affected (0.11 sec)