日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

批量獲取創建列存索引的DDL語句

某些場景中,需要為某個業務或某個模塊創建列索引,而不僅僅是為一條或者幾條SELECT語句中的列創建列索引。在這種場景下,為了避免重復創建列索引,可以先調用存儲過程dbms_imci.columnar_advise_begin(),然后再批量調用存儲過程dbms_imci.columnar_advise(),批量調用完成后,再調用存儲過程dbms_imci.columnar_advise_show()批量獲取DDL語句。

前提條件

  • PolarDB集群版本需滿足以下條件之一:

    • PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.30及以上。

    • PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.12及以上。

  • 您需要具有所操作的表的讀(SELECT)權限。

語法

  • dbms_imci.columnar_advise_begin()

    存儲過程dbms_imci.columnar_advise_begin()用于開啟批量獲取DDL語句模式。該存儲過程調用后,調用存儲過程dbms_imci.columnar_advise()時,不會立即輸出DDL語句,而是緩存在內存中,緩存過程中不會記錄重復的表名和列名。最后通過調用存儲過程dbms_imci.columnar_advise_show()dbms_imci.columnar_advise_show_by_columns()顯式獲取DDL語句。

    說明

    調用存儲過程dbms_imci.columnar_advise_begin()后,再調用存儲過程dbms_imci.columnar_advise_by_columns()的效果與調用存儲過程dbms_imci.columnar_advise()的效果相同。

  • dbms_imci.columnar_advise_show()

    按表展示存儲過程dbms_imci.columnar_advise()所獲取的DDL語句,且DDL語句不會重復覆蓋相同的表。

  • dbms_imci.columnar_advise_show_by_columns()

    按列展示存儲過程dbms_imci.columnar_advise()獲取的DDL語句,DDL語句不會重復覆蓋相同的列。

  • dbms_imci.columnar_advise_end()

    結束批量獲取DDL語句模式并清理緩存。調用存儲過程dbms_imci.columnar_advise_end()前可以重復調用dbms_imci.columnar_advise_show()dbms_imci.columnar_advise_show_by_columns()dbms_imci.columnar_advise_end()調用后,再調用dbms_imci.columnar_advise_show()會返回錯誤信息。

注意事項

  • 用于緩存dbms_imci.columnar_advise()中間結果的最大內存受imci_columnar_advise_buffer_size參數控制,默認為8 MB,一般情況下,能夠緩存幾千張表的DDL語句。如果需要緩存更多的DDL語句,可以使用SET命令適當調整imci_columnar_advise_buffer_size參數值,如SET imci_columnar_advise_buffer_size = 16777216;

  • 即使沒有顯式調用存儲過程dbms_imci.columnar_advise_end(),當鏈接斷開時,也會清理 dbms_imci.columnar_advise()緩存。

示例

t1t2表為例,批量獲取創建列存索引的DDL語句。

  1. 執行如下命令,切換至test庫。

    use test;
  2. 執行如下命令,創建t1t2表。

    create table t1 (a int, b int) engine = innodb;
    create table t2 (a int, b int) engine = innodb;
  3. 調用存儲過程,開啟批量獲取DDL語句模式。

    call dbms_imci.columnar_advise_begin();
  4. 批量執行存儲過程dbms_imci.columnar_advise()

    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. 調用存儲過程,來顯示獲取DDL語句。

    • 按表展示存儲過程dbms_imci.columnar_advise()所獲取的DDL語句。

      call dbms_imci.columnar_advise_show();

      執行結果如下:

      +-------------------------------------------+
      | DDL_STATEMENT                             |
      +-------------------------------------------+
      | ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
      | ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
      +-------------------------------------------+
      2 rows in set (0.00 sec)
    • 按列展示存儲過程dbms_imci.columnar_advise()所獲取的DDL語句。

       call dbms_imci.columnar_advise_show_by_columns();

      執行結果如下:

      +-------------------------------------------------------------------------------------------------------------------------------------------+
      | 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. 批量獲取DDL語句完成后,調用以下存儲過程,結束批量獲取DDL語句模式并清理緩存。

    call dbms_imci.columnar_advise_end();

    執行結果如下:

    Query OK, 0 rows affected (0.11 sec)