17

PostgreSQL 8.4.13 データベースを使用しています。
最近、テーブルに約 8,650 万件のレコードがありました。それらのほとんどすべてを削除しました - 5000 レコードしか残っていません。走った

reindex

vacuum analyze

行を削除した後。しかし、テーブルが大きなディスク領域を占有していることはまだわかります。

jbossql=> SELECT pg_size_pretty(pg_total_relation_size('my_table'));
pg_size_pretty 
----------------
7673 MB

また、残りの行のインデックス値はまだかなり高く、100 万の範囲のようです。バキュームと再インデックスの後、残りの行のインデックスは 1 から始まると思いました。

ドキュメントを読みましたが、インデックスの再作成に関する私の理解が歪んでいたことは明らかです。

それにもかかわらず、私の意図は、削除操作後にテーブル サイズを縮小し、インデックス値を下げてSELECT、テーブルからの読み取り操作 () にそれほど時間がかからないようにすることです。現在、私のレコードから 1 つのレコードを取得するのに約 40 秒かかります。テーブル。

アップデート

ありがとうエルウィン。pgのバージョン番号を修正しました。

vacuum full

私のために働いた。ここでフォローアップの質問が 1 つあります:
大きなテーブルのほとんどを削除した後、既存の行の主キー番号を再起動します

4

1 に答える 1

24

実際にディスク領域を OS に戻すには、 を実行しますVACUUM FULL

参考文献:

于 2013-03-20T04:44:23.317 に答える