最初は、スクリプトの中から遅いクエリを見つけようとしています。そして、私を悩ませていることの1つはINSERT
、テーブルにいくつかのインデックスがあるため、クエリです(この場合、インデックスを毎回再計算する必要があるため、挿入が瞬時に行われないことを理解できます)。
私のホスティング会社 (siteground) は、遅いクエリで実際の状況を調査するために、MySQL ログへのアクセスを制限しています。したがって、問題を見つけるためにバイパス方法を検索する必要があります。
今、phpmyadminで疑わしいクエリを実行し、クエリにかかる時間が問題ないかどうかを確認しています。
ただし、このアプローチにはいくつかの弱点があります。
現在のサーバー負荷に基づいて実行時間を取得します。したがって、その時点でサーバーがビジー状態だった場合、誇張された時間が表示されます。
クエリがキャッシュされた場合、過小評価された時間が得られます。
クエリを確認するには、DB データを実際に変更する必要があります。のようなクエリについては問題ありませんが、および
SELECT
については扱いにくくなっています。DELETE
UPDATE
したがって、別のアプローチを使用する方がはるかに優れています。EXPLAIN
次の場合を除き、良い解決策になる可能性があります。
EXPLAIN
私のDBサーバーでのクエリに対してのみ機能しSELECT
ます(MySQLサーバーのバージョン5.5.32、DOCからの引用:MySQL 5.6.3より前では、SELECTは唯一の説明可能なステートメントです)。私は説明UPDATE
しDELETE
、EXPLAIN SELECT
代用することができます(それは正しいですか?)が、EXPLAIN INSERT
それでも大きな問題です。
質問は次のとおりです。
少なくとも 1 つのインデックスがあると遅くなる
INSERT
可能性があるというのは正しいですか?EXPLAIN UPDATE
代用できますDELETE
かEXPLAIN SELECT
?言及された phpmyadmin の実行と EXPLAIN に加えて、どのアプローチを使用してクエリ速度を調査できますか?
InnoDB
エンジンを使用しています。