6

2 つのインデックスを持つ PostgreSQL テーブルがあります。website_idインデックスの 1 つは列と列をカバーしtweet_id、一意の B ツリー インデックスです。website_id2 番目のインデックスは列のみをカバーし、一意でないインデックスです。

最初のインデックスが存在する場合、2 番目のインデックスは冗長ですか? つまり、第 2 インデックスを使用する利点はありませんか?

4

3 に答える 3

9

postgres の複数列インデックスは、最初の列のみを検索するために使用できるため、実際には冗長です。

複数列の B ツリー インデックスは、インデックスの列の任意のサブセットを含むクエリ条件で使用できますが、インデックスは先頭 (一番左) の列に制約がある場合に最も効率的です。正確なルールは、スキャンされるインデックスの部分を制限するために、先行する列の等価制約と、等価制約を持たない最初の列の不等制約が使用されるということです。

Postgres 9.2 ドキュメント

他のインデックスが役立つ可能性があるリモートケースがあります(詳細については以下を参照してください)。ほとんどのクエリを最初のインデックスで実行し、インデックスに使用できるキャッシュが非常に小さい場合。この場合、結合されたインデックスはキャッシュに適合しない可能性がありますが、小さい単一の列は適合します。

https://dba.stackexchange.com/questions/27481/is-a-composite-index-also-good-for-queries-on-the-first-field/27493#27493

于 2013-07-04T23:55:46.000 に答える
0

はい、そうです(冗長)。

複合インデックスの動作は、Postgres だけでなく、他のほとんどすべての RDBMS に共通です。

于 2013-07-04T23:58:56.077 に答える