2010-12-16 11 views
1

今日、私はいくつかのMySQLパフォーマンスの問題に取り組んでいます。 EXPLAINを使用してテーブルスキャンを検索し、インデックスを作成していくつかの問題を修正しました。MySQL、インデックス、「ロック待ちタイムアウトを超えました」

超高速ですので、私の読み込み。

それ以来、更新クエリは非常に問題があります。 MySQLを再起動すると、最初の数回の挿入や更新がうまく動作します。その後、更新クエリで60秒後に「ロック待ちタイムアウトを超えました;トランザクションを再試行してください」というエラーが表示されます。

Mysqlはすべての挿入/更新で大きなインデックスを再作成していますか?これをどうすれば解決できますか?

答えて

1

はい、MySQLはすべてのアップデートでインデックスを再作成します。あなたはスイートスポットを見つける必要があります。 WHERE条件で使用されるキーにのみ索引を入れてください(またはON条件に参加してください)。

すべてのインデックスを作成すると、更新が遅すぎます。何もインデックスを作成しないと、読み込みが遅すぎます。

索引を必要なだけ絞り込んでもパフォーマンスの問題が残っている場合は、データ構造を再評価する必要があります。

+0

私はあなたが言うことをexaclyでした。 EXPAINがテーブルが行を走査していると指摘した後、where節またはon条件にある列に対してのみインデックスを作成しました。 – koen

+0

それでは、テーブル構造の詳細については、さらに詳しく調べる必要があります。 – Stephen

関連する問題