0

/var/log/mysql/mysql-slow.log に記録されたスロー クエリがあり、PDO を使用して php から実行されます。それを mysql-client にコピー アンド ペーストすると、mysql を再起動した後でも即座に回答が得られます。それをどう説明しますか?

クエリは次のとおりです。

SELECT many_fields FROM some_table u WHERE (u.created_at >= '2011-11-01' AND u.created_at <= '2012-02-01' AND u.valid IS TRUE AND u.test IS FALSE);

クエリの説明は次のとおりです。

+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | u     | ALL  | NULL          | NULL | NULL    | NULL | 86460 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

以下は、php スクリプトを実行したときの SHOW FULL PROCESSLIST の出力です。

+-----+---------+-----------+-----------------------+---------+------+-------+-----------------------+
| Id  | User    | Host      | db                    | Command | Time | State | Info                  |
+-----+---------+-----------+-----------------------+---------+------+-------+-----------------------+
|   9 |some_user| localhost | some_db               | Query   |    0 | NULL  | SHOW FULL PROCESSLIST |
| 187 |some_user| localhost | some_db               | Sleep   |    6 |       | NULL                  |
+-----+---------+-----------+-----------------------+---------+------+-------+-----------------------+
4

1 に答える 1

1

私のコメントへの返信でおっしゃったように、インデックスを使用しないクエリをログに記録しています。このクエリはインデックスを使用していないため、低速のクエリでログに記録されます。インデックスを使用しないためにログに記録されるクエリは、ログに記録されるときの最小実行時間を無視します。

編集:のTime列はSHOW FULL PROCESSLIST、現在の状態にあった時間を示します。これは通常Sleep、クエリが終了したときに設定されるため、クエリのタイミングについては信頼できません。クエリのより信頼性の高いタイミングを取得するには、クエリでより直接的に機能するプロファイリングまたは他のベンチマーク方法を使用する必要があります。

于 2013-02-06T17:43:52.390 に答える