默认列存索引及其批量操作

更新时间:2025-02-25 10:23:06
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文为您介绍如何为库中所有表快速批量地添加列存索引(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)
  • 版本限制
  • 注意事项
  • 语法
  • 添加默认列存索引
  • 为数据库下所有表批量添加列存索引
  • 批量删除列存索引
  • 示例