2012-05-13 23 views
3

テーブルから複数行を削除するテストサーバーでは、100K行を削除するなどの時間がかかることに気付きました。私はmysqlでinnodbエンジンを使用します。 DELETEトリガーはありません。テーブルの行数は約23Mです。時間がかかり クエリは次のようなものです:mysqlで複数のレコードを遅く削除する

DELETE FROM contacts WHERE list_id = som_list_id 

インデックスが追加されます。ここで

EXPLAIN SELECT * 
FROM contacts 
WHERE list_id =118 

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE subscribers  ref  FK_list_id FK_list_id 4 const 1 

は、結果をプロファイリングされています

SET PROFILING = 1; 
    DELETE FROM contacts WHERE list_id = 118; 
    SHOW PROFILE FOR QUERY 1; 


Status Duration CPU_user CPU_system Context_voluntary Context_involuntary  Block_ops_in Block_ops_out Messages_sent Messages_received Page_faults_major Page_faults_minor Swaps Source_function  Source_file  Source_line 
starting 0.000031 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
checking permissions 0.000004 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL check_access sql_parse.cc 4895 
Opening tables 0.000031 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL open_tables  sql_base.cc  4860 
System lock  0.000005 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_lock_tables lock.cc  299 
init 0.000079 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 79 
updating 94.624119 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 277 
end  0.000007 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 356 
Waiting for query cache lock 0.000003 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL lock sql_cache.cc 749 
end  0.000006 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
query end 0.012509 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_execute_command sql_parse.cc 4584 
closing tables 0.000018 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_execute_command sql_parse.cc 4636 
freeing items 0.000038 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_parse  sql_parse.cc 5817 
logging slow query 0.000006 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL log_slow_statement sql_parse.cc 1581 
logging slow query 0.000000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL log_slow_statement sql_parse.cc 1590 
cleaning up  0.000003 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL dispatch_command sql_parse.cc 1443 

私は接点がいる子テーブルはありませんcontact1に連絡先をコピーしようとした:プロファイリングの 結果が類似している:

Status Duration CPU_user CPU_system Context_voluntary Context_involuntary  Block_ops_in Block_ops_out Messages_sent Messages_received Page_faults_major Page_faults_minor Swaps Source_function  Source_file  Source_line 
starting 0.000028 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
checking permissions 0.000005 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL check_access sql_parse.cc 4895 
Opening tables 0.000035 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL open_tables  sql_base.cc  4860 
System lock  0.000014 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_lock_tables lock.cc  299 
init 0.000792 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 79 
updating 72.805936 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 277 
end  0.000006 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_delete sql_delete.cc 356 
Waiting for query cache lock 0.000002 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL lock sql_cache.cc 749 
end  0.000006 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 
query end 0.013662 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_execute_command sql_parse.cc 4584 
closing tables 0.000017 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_execute_command sql_parse.cc 4636 
freeing items 0.000044 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL mysql_parse  sql_parse.cc 5817 
logging slow query 0.000003 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL log_slow_statement sql_parse.cc 1581 
logging slow query 0.000002 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL log_slow_statement sql_parse.cc 1590 
cleaning up  0.000003 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL dispatch_command sql_parse.cc 1443 

ほとんどの場合、更新のように見えます。

なぜ削除に時間がかかるのですか?サーバーのI/Oシステムが遅いので時間がかかるのですか? ありがとうございます。

+0

あなたの質問は何ですか? – Mat

+2

あなたの 'DELETE'は' EXPLAIN SELECT'とプロファイルとは別のテーブルにあります...それはちょうどタイプミスでしょうか? – eggyal

+0

それは同じタルルだ、私は訂正した。 – Oleg

答えて

0

テーブルMyISAMはありますか?それほどありません迅速な使い方

optimize table contacts 

続く

delete quick from contacts... 

をしようとするとデータベースが削除時にインデックスをマージします。次に、最適化されていないスペースを再利用すると、テーブルが破棄されます。

+0

私の質問では、私はinnodbを使用すると書いていました。 – Oleg

関連する問題