[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 メーリングリストの案内