以前はGINインデックスを使用していませんでしたが、どのように動作するのか理解しようとしています。 私はWHERE句でSELECTクエリを実行する必要がある400万行の静的テーブルを持っています。postgresqlでginインデックスを使用する方法
今、私のテーブルは、where句で使用される "name"カラムにBツリーインデックスを持っています。
私は、GINインデックスを使用して全文検索を行うと速度が大幅に向上することを読んでいます。私はチュートリアルhereを読んでいますが、今は私が1つのテーブルしか持っていないときに使うことができるかどうかわかりません。
参加したいテーブルが複数ある場合は、フルテキスト検索が機能しますか?
私はGINインデックス作成がtsvector列で機能することを理解しています。これは私が今までやっていることです:
私は私のテーブルを変更し、1つの以上の列追加しました:TSVを:
ALTER TABLE my_table ADD COLUMN tsv tsvector;
私はts_vector列にGINインデックスをcreatead:
CREATE INDEX tsv_idx ON my_table USING gin(to_tsvector('english', name));
そして私は、列を更新しました:
UPDATE my_table SET tsv = to_tsvector(name)
は、上記の正しいですか?したがって、次のクエリを実行する場合は、
SELECT clm1, clmn2 FROM my_table WHERE name LIKE 'Ath%' ORDER BY 1
GINインデックスを使用してどのように行うことができますか?
私はこの試みた:
SELECT clm1, clmn2 FROM my_table WHERE tvs LIKE 'Ath%' ORDER BY 1
をしかし、私はエラーを取得する:
ERROR: operator does not exist: tsvector ~~ unknown
は、私はここで何をしないのですか? GINの正しい使い方は何ですか?また、単一のテーブルでフルテキスト検索を適用できますか?
ありがとうございました。結局、私はGINインデックスと一緒にpg_trgm拡張を使いました。私はインデックスを次のように作成しました:CREATE INDEX my_index ON my_table USING gin(名前はCOLLATE pg_catalog。 "default" gin_trgm_ops); EXPLAINコマンドを使用すると、索引が使用されていることが確認され、速度が大幅に改善されました。 – user1919
私は物事をスピードアップする他の方法を見つけようとしています。例えば。マテリアライズド・ビューまたはサーバー側のカーソル(私はpsycopg2を使用します)。 – user1919