You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spanner中复合主键是否需单独创建索引?

Spanner复合主键索引相关问题解答

你的表DDL如下:

CREATE TABLE orders_pii(
    order_id STRING(64) NOT NULL,
    retailer_id STRING(64) NOT NULL,
    site_id STRING(64) NOT NULL,
    shipping_labels ARRAY<STRING(MAX)>,
    order_creation_timestamp TIMESTAMP NOT NULL,
    order_stage_by_timestamp TIMESTAMP NOT NULL,
) PRIMARY KEY(order_id, retailer_id, site_id)

根据你引用的Spanner文档描述:

Spanner会自动为每个表的主键创建索引。例如,您无需为主键执行任何索引操作

针对你的复合主键疑问,解答如下:

  • Spanner会直接创建包含这三个列的复合主键索引,而非为三个列分别创建独立索引。这个索引的排序规则严格遵循主键列的定义顺序:先按order_id排序,同order_id的行再按retailer_id排序,最后按site_id排序。
  • 是否需要单独创建索引,完全取决于你的查询需求:
    • 若你的查询条件总是能匹配复合主键的前缀(比如仅用order_id过滤,或order_id+retailer_id组合过滤,或完整三个主键列过滤),默认的复合主键索引足以支撑查询,无需额外创建单列索引。
    • 若存在仅基于retailer_id或site_id的查询(不包含前面的主键前缀列),这类查询无法利用默认的复合索引,此时才需要为对应列创建二级索引。

内容的提问来源于stack exchange,提问作者Sid P Tkf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:37:38