本文将介绍全局二级索引(Global Secondary Index,GSI)主要功能及常见问题。

功能介绍

全局二级索引(Global Secondary Index,GSI)支持按需增加拆分维度,提供全局唯一约束。每个GSI对应一张索引表,使用XA多写保证主表和索引表之间数据强一致。

全局二级索引支持如下功能:

  • 增加拆分维度。
  • 支持全局唯一索引。
  • XA多写,保证主表与索引表数据强一致。
  • 支持覆盖列,减少回表操作,避免额外开销。
  • Online Schema Change,添加GSI不锁主表。
  • 支持通过HINT指定索引,自动判断是否需要回表。

常见问题

  • Q:全局二级索引能够解决什么问题?
    A:如果查询的维度与逻辑表的拆分维度不同,会产生跨分片查询。跨分片查询的增加会导致查询卡慢、连接池耗尽等性能问题。GSI能够通过增加拆分维度来减少跨分片查询,消除性能瓶颈。
    说明 创建GSI时需要注意选择与主表不同的分库分表键,详情请参见使用全局二级索引
  • Q:全局二级索引和局部索引有什么关系?

    A:全局二级索引和局部索间的关系如下所示:

    • 全局二级索引:不同于局部索引,如果数据行和对应的索引行保存在不同分片上,称这种索引为全局二级索引,主要用于快速确定查询涉及的数据分片。
    • 局部索引:分布式数据库中,如果数据行和对应的索引行保存在相同分片上,称这种索引为局部索引。DRDS中特指物理表上的MySQL二级索引
    • 两者的关系:两者需要搭配使用,DRDS通过GSI将查询下发到单个分片后,该分片上的局部索引能够提升分片内的查询性能。