データベースでは、部分インデックス(フィルター インデックスとも呼ばれます)は、テーブル内の行のサブセットが含まれるように何らかの条件が適用されたインデックスです。
これにより、テーブルがかなり大きく、選択性が極めて高い場合でも、インデックスを小さく保つことができます。
トランザクション テーブルがあり、エントリが STATUS = 'A' (アクティブ) で始まり、その後、他のステータス (保留中の場合は 'P'、作業中の場合は 'W') を経て、最終ステータス 'F' に到達し、その時点で再度処理される可能性がなくなるとします。
PostgreSQL では、便利な部分インデックスは次のように定義されます。
txn_table ( status )にインデックスpartial_statusを作成します( status in ( 'A' 、'P' 、'W' ) )。
このインデックスは、「最終」ステータス「F」に達した何百万もの行を一切保存せず、まだ「作業が必要」なトランザクションを検索するクエリがこのインデックスを介して効率的に検索できるようにします。
同様に、部分インデックスを使用すると、列が null でない行のみにインデックスを付けることができます。これは、列が通常 null である場合に役立ちます。
object_table ( updated_on )にインデックスpartial_object_updateを作成します。ただし、updated_onはnullではありません。
このインデックスにより、次のクエリは更新されたタプルのみを読み取ることができます。
object_tableから、updated_onがnullでないものを* で選択し、updated_onで順序付けします。
条件はインデックス基準と同じである必要はありません。以下の Stonebraker の論文では、次のようなインデックスの例がいくつか示されています。
給与が2100 を超える従業員(年齢)に、 partial_salaryインデックスを作成します。
サポート
SQL Serverでは、このタイプのインデックスはフィルターインデックスと呼ばれます。[1]
部分インデックスは、2002年2月にリリースされたバージョン7.2以降、PostgreSQLでサポートされています。 [2]
SQLiteはバージョン3.8.0以降で部分インデックスをサポートしています。[3]
MongoDBはバージョン3.2以降で部分インデックスをサポートしています。[4]
参考文献
- ^ SQL Server 2008 ドキュメント: フィルター インデックスの設計ガイドライン。Microsoft TechNet。
- ^ 「PostgreSQL ドキュメント: リリース ノート: リリース 7.2」。 PostgreSQL 。2009 年 10 月 9 日に取得。
部分インデックスを有効にする (Martijn van Oosterhout)
- ^ 「部分インデックス」。2014年2月4日閲覧。
- ^ MongoDB V302 リリースノート。
外部リンク
- 部分インデックスのケース
