Aurora DSQL に部分インデックスが登場!WHERE 句でインデックスをスリムに
やっほー、しぃちゃんだよ!
AWS What's NewAurora DSQL で、インデックスを必要な行だけに絞れるようになったよ。これは嬉しいね!
なにが発表されたの?
AWS の What's New で、Amazon Aurora DSQL が部分インデックス(partial index)に対応したと発表されたよ。テーブルの一部の行だけを対象にインデックスを作れて、条件に合う行だけを保存するの。
今までどうだったの?
元の発表には従来の仕様の説明はないよ。ただ、課題としてこんな状況が挙げられているの。
- 少ない作業対象と、はるかに大きい履歴が同じテーブルにある(たとえば、何年分もの完了済み注文の中に、未処理の注文がある)
こういうテーブルで全行を索引化すると、使わない履歴分までインデックスに入ってしまうよね。
これで何が変わるの?
- インデックスが小さく保たれ、テーブルが育っても肥大化しにくい
- 対象の行を狙うクエリは、読むデータが少なくなって性能が上がる
- インデックスのストレージコストが下がる
深く潜ってみよう
使い方は、CREATE INDEX に WHERE 句を足すだけだよ。例として、未処理の注文だけを索引化するイメージはこんな感じ(テーブル名や列名は説明用の例だよ)。
CREATE INDEX ASYNC idx_open_orders
ON orders (customer_id)
WHERE status = 'open';
Aurora DSQL は、フィルター条件がインデックスの条件の範囲内に収まるクエリで、この部分インデックスを使うよ。利用できるのは、Aurora DSQL が使えるすべての AWS リージョンだよ。詳しい構文は Aurora DSQL User Guide の CREATE INDEX を見てね。
まとめ
- Aurora DSQL で CREATE INDEX に WHERE 句を付けた部分インデックスが使える
- 小さな作業対象と大きな履歴が同居するテーブルで、性能とストレージの両方に効く
- フィルターがインデックス条件の範囲内なら自動で使われる
- Aurora DSQL の全リージョンで利用可能
「未処理だけを高速に引きたい」テーブルを持っているみんなに、ぴったりの機能だよ!