調用預存程序dbms_imci.columnar_advise()
,可以針對某條SQL語句來擷取對應的DDL語句,執行擷取到的DDL語句可以為未被列索引覆蓋的列添加列索引,按順序執行完DDL語句後,即可保證這條SQL語句中使用的所有列都被列索引覆蓋。
前提條件
PolarDB叢集版本需滿足以下條件之一:
PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.30及以上。
PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.12及以上。
您需要具有所操作的表的讀(SELECT)許可權。
文法
擷取按表添加列存索引的DDL語句。
dbms_imci.columnar_advise('<query_string>');
擷取按列添加列存索引的DDL語句。
dbms_imci.columnar_advise_by_columns('<query_string>');
參數說明
參數 | 說明 |
query_string | 需要解析的SQL語句。 說明
|
注意事項
調用該預存程序僅擷取DDL語句,並不會執行DDL語句。
樣本
以t1
和t2
表為例,擷取建立列存索引的DDL語句。
執行如下命令,切換至
test
庫。use test;
執行如下命令,建立
t1
和t2
表。create table t1 (a int, b int) engine = innodb; create table t2 (a int, b int) engine = innodb;
調用預存程序,擷取DDL語句。
擷取按表添加列存索引的DDL語句。
call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');
執行結果如下:
+-------------------------------------------+ | DDL_STATEMENT | +-------------------------------------------+ | ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; | | ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; | +-------------------------------------------+ 2 rows in set (0.00 sec)
SELECT語句中
t1
和t2
表中的列都沒有建立列索引。調用預存程序後,分別擷取了按表添加列索引的DDL語句,執行DDL語句後會為t1
和t2
表中所有支援列存索引的列添加列索引。擷取按列添加列存索引的DDL語句。
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');
執行結果如下:
mysql> 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'); +-------------------------------------------------------------------------------------------------------------------------------------------+ | 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)
SELECT語句僅查詢
t1.a
、t1.b
以及t2.a
三列,調用預存程序dbms_imci.columnar_advise_by_columns()
可以得到按列添加列索引的DDL語句,執行DDL語句後,可以確保SELECT語句中的所有列都被列索引覆蓋。