[前][次][番号順一覧][スレッド一覧]

mysql:8925

From: SAITO Masaru <SAITO Masaru <daisaito@xxxxxxxxxx>>
Date: Mon, 08 Mar 2004 02:42:46 +0900
Subject: [mysql 08925] Re: DELETE で 2000 万件より 200 万件を削除した場合、 8 時間かかってしまいます。

齋藤@横浜です。


> はじめまして、錠といいます。よろしくお願いいたします。
> 
> 件名の通り、2000万件のレコードが保管されている1テーブルより、
> DELETE SQLによる削除を行いますと、該当レコードは200万件
> なのですが、処理が完了するまで、8時間もかかってしまいます。
> 
> DELETE処理の後には、最適化処理が実行されるものなのでしょうか。
> そのテーブルは、カラム数20、インデックス10が設定されています。

その処理がどのように行われているかわかりませんが、deleteを1SQLで
一気に行う場合と、1行ずつコツコツとやる場合を比較して
後者の方があっさりと終わってしまう事があります。
DBMによって仕組みは違うと思いますが、削除対象のrowを見つけて
その行の情報をメモリに持っておき、その行に対して削除を行うわけですが
意外にこの処理が重い事あります。今回の場合のように全体の行数が多くて
なおかつ削除するデータの割合が高い場合は特に重くなると思います。

もしそのTABLEにauto incrementなどのuniq indexフィールドを持っている
のであればまずその行状法をとってきてから、そのuniq indexをkeyに
1行づつ200万回実行してみるのも1つの方法だと思います。
# 少なくとも8時間よりは格段に早くなると思います。

あまりきれいな方法ではないと思いますが、急場しのぎの1つの方法として
検討してみる価値はあると思います。(最終手段かもしれませんが。。)


---
SAITO Masaru <daisaito@xxxxxxxxxx>


[前][次][番号順一覧][スレッド一覧]

      8917 2004-03-07 18:23 ["錠 尚史" <ikari@xxx] DELETE で 2000 万件より 200 万件を削除した場合、 8 時間かかってしまいます。
      8922 2004-03-07 22:06 ┣[ML account <ml@xxxxx]                                       
      8924 2004-03-08 01:51 ┣[Katuhisa Uramoto <ka] Re: DELETE で 2000  万件より 200  万件を削
->    8925 2004-03-08 02:42 ┗[SAITO Masaru <daisai]