[pgsql-jp: 25458] Re: deleteにすごく時間がかかる現象について

Mashiki mashiki @ yanah.com
2002年 3月 28日 (木) 17:31:18 JST


 Mashikiです。

>create table history(mykey serial primary key, 
>	time timestamp default current_timestamp, msg text);
>上記のテーブルで、20万件ほどの行を削除しようとすると処理時間に2,3時間か
>かってしまいます。
>実現したいことは、このテーブルから20万件を超える行はtimeソート順に古い物
>から削除したい、ということです。(表現がつたなくて申し訳ありません)
>そのためのSQL文は、以下のように実施してみました。
>SQL文:
>delete from history where mykey in(select mykey from history order by
>time desc offset 200000);
>
>処理時間をもっと速くする方法(SQL文を変更するとか)はないのでしょうか。


時間が古いほど、キーが小さいことが保証されるなら
セレクト文で20000件目のキーを取得して
キー指定でデリートすれば速い思います。

delete from history
 where mykey < (
 	select mykey from history order by
	time desc limit 1 offset 200000
)
;

どうでしょ?



pgsql-jp メーリングリストの案内