web-dev-qa-db-ja.com

Postgresのインデックスを一時的に無効にすることは可能ですか?

一時的に無効にしたいテーブルのインデックスが1つありますが、それが可能であることを示唆するドキュメントは見つかりません。

理由:高速化のために設計されたものとは無関係のクエリで問題を引き起こす可能性のあるインデックスを持っています。これは新しいインデックスであり、システムが導入されて以来、システム全体が遅くなったように見えます。私はそれを犯人として確実に排除できるようにしたいだけです。これは最も簡単な方法のようです。他の解決策の提案や、より良い質問の提案も大歓迎です。

43
quodlibetor

システムカタログをポークして、インデックスを無効にすることができます。

update pg_index set indisvalid = false where indexrelid = 'test_pkey'::regclass

つまり、インデックスはクエリに使用されませんが、更新されます。これは、同時インデックス作成に使用されるフラグの1つです。インデックスがまだ更新されているように見えるかどうかを確認するための簡単なテストしか行っていないことに注意してください。

64
araqnid
begin;
drop index foo_ndx;
explain analyze select * from foo;
rollback;

1つだけを無効にする方法はないと思いますが、トランザクションでこれを行うと、簡単に回復できます。 indexscanを無効にして、すべてのインデックスを無効にすることもできます。

また、explain analyzeクエリで。

29
Seth Robertson