列存索引(Columnar Index)是云原生多模数据库 Lindorm 宽表引擎提供的列式二级索引。通过为宽表创建列存索引,海量数据可以按列式格式重新组织,从而在聚合、扫描、多列投影等 OLAP 分析场景下显著提升查询吞吐。列存索引与宽表数据自动保持同步,用户在业务侧无需变更主表写入方式,即可通过标准 SQL 完成分析查询。
本节介绍列存索引的应用场景、核心能力与使用限制,并通过一个完整示例,帮助您在 5 分钟内为宽表创建列存索引并完成一次分析查询。示例默认使用 OLAP 模式(推荐,也是新版 Lindorm 实例的默认行为)。若您希望使用 Lake 模式,请参见存储模式。
应用场景
车联网 / 物联网:设备指标聚合、时序统计分析。
电商与营销:订单、行为、用户画像的多维分析。
物流与供应链:订单、运单、履约状态的报表查询。
金融风控:交易明细的实时聚合与关联分析。
核心能力
OLAP 查询加速:列存索引针对聚合、过滤、扫描等 OLAP 操作深度优化,查询过程中仅读取涉及的列,避免行式存储的全行扫描开销。
无缝兼容宽表 SQL 语法:通过标准
CREATE INDEX ... USING COLUMNAR语法即可创建索引;查询时在 SELECT 语句中携带 Hint,即可自动路由至计算引擎并命中列存索引,无需改造业务代码。灵活的数据分区策略:支持普通分区表达式 + Bucket 分区表达式组合,普通分区支持时间/日期等业务字段的表达式计算,Bucket 分区可对高基数字段进行 Hash 分片,帮助您在数据量与查询效率之间取得平衡。
Schema 动态感知:可自动感知宽表列的新增、动态列、通配符列的变更,并同步至列存索引,无需重建索引即可扩展分析字段。
前提条件
使用限制
开通步骤
登录Lindorm管理控制台。
在页面左上角,选择实例所属的地域。
在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理。
在左侧导航栏,选择宽表引擎。
单击列存索引页签,并单击立即开通。
在弹出的对话框中单击确定,等待开通完成。
开通完成后,即可通过标准 SQL CREATE INDEX ... USING COLUMNAR 为宽表创建列存索引。
场景介绍
假设需要对订单明细表 orders 进行高效并行数据分析,表结构如下:
+------------+-------------+---------+----------------+
| TABLE_NAME | COLUMN_NAME | TYPE | IS_PRIMARY_KEY |
+------------+-------------+---------+----------------+
| orders | id | BIGINT | true |
| orders | dt | VARCHAR | true |
| orders | amount | DECIMAL | false |
| orders | status | VARCHAR | false |
+------------+-------------+---------+----------------+主键
id是订单标识,基数较大,适合作为 Bucket 分区键。主键
dt是订单日期(业务上通常按天分析),可直接作为普通分区键。
操作示例
创建列存索引:
对
orders的全部字段创建列存索引,按日期分区,Bucket 数量设置为 128:CREATE INDEX orders_idx USING COLUMNAR ON orders(*) PARTITION BY ENUMERABLE (dt, bucket(128, id)) WITH ( `lindorm_columnar.user.index.database` = 'my_index_db', `lindorm_columnar.user.index.table` = 'orders_index' );说明上述 SQL 在 OLAP 模式与 Lake 模式下语法完全一致。系统会根据实例默认引擎自动选择底层实现。您也可以通过
WITH参数显式切换到 Lake 模式或指定 OLAP 引擎资源组,详见存储模式。查看索引状态:
SHOW INDEX FROM orders;返回示例(关键字段):
+-------------+------------+------------+-------------+---------------------------------+------------+ | TABLE_SCHEMA| DATA_TABLE | INDEX_NAME | INDEX_STATE | INDEX_PROGRESS | INDEX_TYPE | +-------------+------------+------------+-------------+---------------------------------+------------+ | default | orders | orders_idx | ACTIVE | 2026-08-10 18:59:20.652 +0800 | COLUMNAR | +-------------+------------+------------+-------------+---------------------------------+------------+INDEX_STATE从BUILDING转为ACTIVE后,索引即可用于查询。INDEX_PROGRESS表示增量同步位点:位点之前的宽表数据已完全同步至列存索引;BUILDING阶段该字段为空,进入ACTIVE后会随增量同步持续推进。
SHOW INDEX完整字段说明及查询示例请参见基础用法 — 查看列存索引。使用列存索引进行数据查询:
在 SELECT 语句中携带 Hint,即可将查询路由至计算引擎并命中列存索引:
SELECT /*+ _use_ldps_(cg0), _columnar_index_ */ dt, COUNT(*) AS order_cnt, SUM(amount) AS gmv FROM my_index_db.orders_index WHERE dt BETWEEN '2026-08-01' AND '2026-08-10' GROUP BY dt;其中
cg0为查询所使用的计算资源组名。您可以将其替换为实际的资源组名。
计费说明
列存索引本身不收取额外的功能费,创建后会产生以下费用:
列存索引数据的存储费用。
主表与列存索引之间数据同步实际使用的 CU 费用。
具体计费项与计费规则请以阿里云官方定价页为准。