調用存儲過程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語句中的所有列都被列索引覆蓋。