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]