2013-05-15 10 views
5

私はこのようなクエリを実行するのに時間がかかります。テーブルは約400万行です。大きなテーブルのレコードを削除するとMySQLが遅くなる

DELETE FROM TABLE WHERE value_was IS NULL OR value_was <= value_now; 

私は(value_was、value_now)のインデックスを作成することができます願っていますので、私はこのテーブルには主キーを持っていない

DELETE FROM TABLE WHERE 
ID1 IN (SELECT ID1 from TABLE where value_was IS NULL) 
OR ID2 IN (SELECT ID2 FROM TABLE WHERE value_was <= value_now); 

ような何かを行うことができます。 2つの複合キーがあります。サブクエリで同じテーブルを使用することはできませんが、最初のクエリのパフォーマンスをどのように向上させるのですか?

ありがとうございました。ありがとうございました。更新

: デシベルが原因のデータが格納されている方法にはInnoDB

+0

テーブルは 'myISAM'または' innoDB'ストレージエンジンに格納されていますか? –

+0

それはinnoDBです。私はまた質問を更新しました。 – toy

答えて

7

で、内部リンクリストとして、InnoDBテーブルには、巨大なDELETE操作で本質的に遅いです。ストレージタイプをmyISAMに変更すると、操作が非常に高速になるはずです。同様の状況では100倍の改善が見られました。

+0

答えをありがとう。それはレガシーシステムなので、エンジンを交換することはできません。とにかくinnoDBでクエリを改善できるのでしょうか? – toy

+0

ここhttp://bytes.com/topic/mysql/answers/77660-speed-innodb-deletes-large-tables男がkey_buffer_sizeを増やすことを提案します –

+1

この記事http://mysql.rjweb.org/doc.php/deletebigあなたはもっと深い情報を提供していますが、何歳かはわかりません。とにかく:) HTH、 –

関連する問題