关于本文
本文由利用生成式 AI 的自动化流程创建。内容基于参考信息进行整理,未经作者实际设备验证。
验证状态:unverified(未进行实机验证)
Amazon Aurora DSQL 宣布支持“部分索引(Partial Indexes)”,该功能仅针对表中满足特定条件的行。这使得排除历史日志或已完成数据等大规模历史行成为可能,从而能够构建仅针对当前活动数据的轻量级索引,以提升查询性能并降低存储成本。
部分索引(Partial Index)的概述与目的
随着运行时间的延长,数据库表中的行数不断增加,索引本身的体积也会膨胀。在常规索引中,会为整个表的全部行生成键,因此查询频率较低的历史数据也会持续占用索引空间。
根据一手资料显示,Amazon Aurora DSQL 所支持的部分索引不是存储整张表的所有行,而是仅针对符合特定条件的子集(qualifying rows)构建索引的功能。
由于索引中存储的数据量被精简,一手资料指出该功能带来了以下两大显著效果:
提升查询性能:由于搜索时扫描的索引数据量减少,读取目标行时的 I/O 效率得以提高。
降低索引存储成本:由于条件之外的大量行被排除在索引之外,因此可以抑制索引消耗的存储容量。
部分索引的评估与应用判断流程
Aurora DSQL 在执行查询时是否使用部分索引,取决于查询的搜索条件(过滤条件)是否包含在创建索引时指定的条件范围内。
基于一手资料的判断流程如下:
flowchart TD
A[クライアントからのクエリ発行] --> B{クエリのフィルタ条件が部分インデックスのWHERE条件内に収まるか?}
B -- 収まる --> C[部分インデックスを参照して読み取りデータ量を削減]
B -- 収まらない --> D[部分インデックスは使用されずテーブル走査または別インデックスを使用]
在 Aurora DSQL 中,只有当执行查询的提取条件在逻辑上与定义部分索引时的条件表达式一致,或者包含在其范围之内时,优化器才会选择使用部分索引。
部分索引的有效使用场景
在一手资料中,作为典型使用场景举例了诸如“在长期积累的大量已完成订单(completed orders)中包含的少数未完成订单(open orders)”这样的关系。
业务系统中常见的具有以下特征的表即属于此类情况。
工作集(Working Set)的局部化: 日常更新或引用的仅限于具有最近状态的行,处理结束的行的引用频率极低。
生命周期偏差: 处于“未处理”、“配送中”等特定状态的期间较短,而处于“已完成”、“已取消”等状态的行占绝大多数。
数据量不均衡: 随着时间推移累积的完成历史记录占总数的九成以上,而当前处理的目标数据仅占总数的百分之几。
如果为这样的表创建全表索引,大部分空间将被不作为搜索对象的事务所占据。原始资料中解释说,通过利用部分索引仅将未完成订单等工作集作为提取对象,即使整张表不断增长,也能将索引大小保持得很小。
定义方法与查询优化要点
部分索引的创建是通过在常规索引创建语法中添加条件子句来实现的。
根据原始资料,CREATE INDEX 语句中添加 WHERE 子句,从而定义一个仅筛选出目标工作集的索引。
索引定义的语法示意
根据原始资料中所示的方法,仅提取未完成状态的语法格式如下。
-- 保存名: create_partial_index.sql -- 実行前提: Aurora DSQL上で注文テーブル(orders)が存在すること -- 期待できる確認内容: statusが'open'の行のみを対象とするインデックスが作成される定義構文 CREATE INDEX idx_orders_open ON orders (order_id) WHERE status = 'open';
通过此定义,只有满足 status = 'open' 的行才会被注册到索引中。
查询执行时的性一致
为了让索引发挥作用,编写查询语句时需要格外注意。原始资料中解释说:“当查询的过滤条件落在索引的条件范围内(whose filter falls within the index's condition)时,Aurora DSQL会使用部分索引”
例如,如果存在上述创建的索引,查询端也需要使条件保持一致。
-- 保存名: query_open_orders.sql -- 実行前提: idx_orders_openインデックスが存在すること -- 期待できる確認内容: インデックスの条件内に収まる検索を行うことで、読み取りデータ量が削減される想定のクエリ SELECT order_id, customer_id, order_date FROM orders WHERE status = 'open' AND customer_id = 12345;
如果在查询端 WHERE status = 'completed'或进行未指定状态条件的检索时,该搜索条件将超出部分索引的条件范围,因此无法利用相应的部分索引进行扫描。
实际业务引入的优势与使用注意事项
在 Aurora DSQL 中采用部分索引时,有一些在设计阶段必须了解的优势与注意事项。
主要优势
写入负载的局部化: 即使添加或更新不满足条件的数据(如已完成的数据等),也不会触发部分索引的维护,从而能够抑制写入时的开销。
维持缓存效率: 由于索引本身的尺寸变小,因此可以有效利用内存上的缓存区域,从而提高高频查询的响应速度。
降低成本: 能够抑制 Aurora DSQL 的存储使用量,并防止因长期运营中索引膨胀而导致的成本增加。
使用注意事项
索引使用的条件匹配: 应用程序发出的 SQL 提取条件必须严格包含在索引定义的
WHERE子句的逻辑范围内。如果条件编写方式不同,索引可能会被忽略,因此确认执行计划非常重要。目标数据的动态变化: 如果由于更新处理导致行从条件中被排除(例如:从
open到completed的状态变更),则从索引中删除和表的更新将同时发生。这就需要结合状态转换的频率和模式进行设计。避免过度创建部分索引: 如果针对每个条件都细致地创建部分索引,会增加索引管理的复杂性,因此将其限定应用于真正访问频率高的高频工作集才是明智之举。
提供区域与官方文档参考
根据第一手资料显示,Aurora DSQL 的部分索引功能已在所有提供 Aurora DSQL 的 AWS 区域上线。
关于语法细节、支持的操作符以及约束条件等详细信息,请参考 Aurora DSQL 用户指南中的 CREATE INDEX 相关条目。
总结
本文整理了关于 Amazon Aurora DSQL 支持部分索引的官方发布内容。
需要提前确认的要点和限制条件如下:
索引目标的选定: 预先设计是否存在具有明确边界的工作集,例如特定状态或时间段,而非整个表。
查询条件的一致性: 为了能够使用部分索引,查询过滤条件必须在逻辑上位于索引的
WHERE子句范围之内。进行实机验证: 第一手资料中记录了功能新增的事实与概述,但关于实际的查询计划、存储减少幅度以及延迟改善程度,需要在各自的环境中获取执行计划(如 EXPLAIN)并进行评估。
参考信息
source_title: Amazon Aurora DSQL now supports partial indexes
source_url: https://aws.amazon.com/about-aws/whats-new/2026/10/aurora-dsql-partial-indexes/

