本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文为您介绍如何为库中所有表快速批量地添加列存索引(Clustered Columnar Index,CCI)。
版本限制
实例版本需为polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213及以上。
注意事项
批量添加的列存索引为默认列存索引。
默认列存索引可能不能满足业务的定制化需求,如需根据业务定制CCI,请参见列存索引创建指南。
一张表只能添加一个列存索引。
语法
添加默认列存索引
CREATE CLUSTERED COLUMNAR INDEX <cci_name> ON <table_name>;
创建默认列存索引时不需要显式的指定排序键和分区键。
排序键与主表的主键将会保持一致。
分区键与主表的主键将会保持一致。
固定选择
HASH
作为分区策略。更多信息,请参见HASH分区。
为数据库下所有表批量添加列存索引
通过指定数据库名称,可以为数据库中的所有表创建默认列存索引,且无需指定列存索引名称、分区键、排序键,这种方式可以有效的提升创建大量列存索引的效率。
CREATE COLUMNAR INDEX FOR TABLES IN <db_name>;
-- 或者
CREATE COLUMNAR INDEX FOR TABLES FROM <db_name>;
数据库中必须至少包含一张未创建列存索引的表(已有列存索引的表将被跳过),否则执行将失败并返回错误信息。
批量创建的列存索引和单独创建的列存索引作用和约束是一致的。更多信息,请参见创建和使用CCI。
批量删除列存索引
DROP COLUMNAR INDEX FOR TABLES IN <db_name>;
-- 或者
DROP COLUMNAR INDEX FOR TABLES FROM <db_name>;
通过指定库名,可以删除库中所有的列存索引(包括批量创建的列存索引和单独创建的列存索引),请谨慎操作。
示例
示例表的建表SQL如下:
CREATE TABLE `t_order` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext,
`order_detail` longtext,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
PARTITION BY KEY(`order_id`)
PARTITIONS 16
为单表添加默认列存索引
CREATE CLUSTERED COLUMNAR INDEX `default_cci` ON `t_order`;
查看添加默认索引后的表结构
SHOW CREATE TABLE t_order;
为数据库下所有表批量创建列存索引
CREATE COLUMNAR INDEX FOR TABLES IN `test`;
查看所有列存索引
SHOW COLUMNAR INDEXES;
批量删除数据库下所有列存索引
DROP COLUMNAR INDEX FOR TABLES IN test;
查看所有列存索引
SHOW COLUMNAR INDEXES;
该文章对您有帮助吗?
- 本页导读 (1)
- 版本限制
- 注意事项
- 语法
- 添加默认列存索引
- 为数据库下所有表批量添加列存索引
- 批量删除列存索引
- 示例