PostgreSQL では、基本的に条件述語を含むインデックスである「部分インデックス」を作成できます。http://www.postgresql.org/docs/8.2/static/indexes-partial.html
テスト中に、クエリが 12 万行のテーブル内の特定の 12 行のみにアクセスしている場合に、それらが非常にうまく機能することがわかりました。
しかし、これを展開する前に、知っておくべき欠点や注意事項はありますか?
PostgreSQL では、基本的に条件述語を含むインデックスである「部分インデックス」を作成できます。http://www.postgresql.org/docs/8.2/static/indexes-partial.html
テスト中に、クエリが 12 万行のテーブル内の特定の 12 行のみにアクセスしている場合に、それらが非常にうまく機能することがわかりました。
しかし、これを展開する前に、知っておくべき欠点や注意事項はありますか?
主な注意点は、それらを不適切に使用しないことです。これらは、大きなテーブルの少数派である1セットの基準に一致する行を識別するのに適しています。
Orders
たとえば、order_status
次のように、注文ステータス全体のデータの列と分布を含む表を取り上げます。
新しい注文のリストを取得するために頻繁にクエリwhere order_status = 'New'
を実行し、それ以外のほとんどの場合、IDで直接注文を参照する場合は、部分インデックスが役立ちます。120kのうち12行の例では、これはさらに当てはまります。
プロ:
これにより、インデックスのサイズが縮小され、インデックスを使用するクエリが高速化されます。また、すべての場合にインデックスを更新する必要がないため、多くのテーブル更新操作が高速化されます。
短所:
これはもはや実際のインデックスではないため、インデックスでカバーされていない値に対して完全結合またはフィルタリングを行うと、テーブル サイズが大きくなるにつれてパフォーマンスが低下します。