web-dev-qa-db-ja.com

PostgresqlマルチカラムGINインデックス

このようなpostgresqlテーブルitemsがあるとします。 (keywords列はtext[]タイプです)

name   account_id      keywords
------------------------------
foo1   1               ['k1', 'k2']
foo2   1               ['k1', 'k3']
foo3   2               ['k4', 'k1']
foo4   2               ['k1', 'k6']

Itemsの各行はAccountに関連しています(テーブルはaccount_idによって仮想的に分割されています)。 「アカウント1のキーワードk1のアイテム」のようなクエリを作成します。このクエリでは、account_idおよびkeywords列に複合GINインデックスが必要です。

実際には、次のような行を持つ逆索引が必要です(各行のキーは複合でなければなりません)。

(account_id, keyword) --> [item1, item2, ...]

Postgresqlでこのインデックスを作成する正しい方法は何ですか?

6
Taha Jahangir

答えはこの質問の答えと同じです: 配列列を使用した内部結合

重要な点は、_btree_gin_拡張機能のインストールです(これには、_postgresql-contrib_などの追加パッケージが必要になる場合があります)

次に、拡張機能を次のようにして簡単に有効にすることができます(postgresql> = 9.1が必要)

_CREATE EXTENSION btree_gin;_

インデックスは次のようにして作成できます:

CREATE INDEX index_name ON items USING GIN (account_id, keywords);

6
Taha Jahangir