4

インデックスのない 100k レコードのテーブルがあります。左結合に使用される列に新しいインデックスを作成しました。テーブルのインデックスを再作成する必要がありますか?

インデックスの作成には数ミリ秒かかりました。したがって、テーブルのインデックスを再作成するまで、クエリはこのインデックス(データなし)を使用できないと推測しています(他のインデックスがある場合は、インデックスのみを再作成します-マニュアルを読みます)。

新しいインデックスにデータが入力されると、情報が見つかりませんか? これは自動的に行われますか?いつ?

4

1 に答える 1

6

が完了CREATE INDEXすると、インデックスを使用する準備が整います。その後、実行する必要はありませんREINDEX

REINDEX ドキュメントページから:

REINDEX は、インデックスの内容が最初から再構築されるという点で、インデックスの削除と再作成に似ています。ただし、ロックに関する考慮事項はかなり異なります。REINDEX は書き込みをロックアウトしますが、インデックスの親テーブルの読み取りはロックアウトしません。

つまり、 afterREINDEXと同様に動作します。CREATEDROP

そしてCREATE INDEX ドキュメントページから:

インデックスを作成すると、データベースの通常の操作が妨げられる可能性があります。通常、PostgreSQL は書き込みに対してインデックスを作成するテーブルをロックし、テーブルの 1 回のスキャンでインデックス構築全体を実行します。他のトランザクションは引き続きテーブルを読み取ることができますが、テーブル内の行を挿入、更新、または削除しようとすると、インデックスの構築が完了するまでブロックされます。

これは、作成がインデックス化を意味することを明確に説明していると思います。

ただし、特定のクエリがインデックスを使用するかどうかは、さまざまなことに依存します。クエリがインデックスを使用しない場合は、クエリ、テーブル定義 (create tableステートメントなど)、定義したインデックス、およびexplain (analyze, verbose)クエリの出力を投稿する必要があります。

于 2014-12-23T12:06:39.870 に答える