为什么 MySQL 来自 mysql-slow-log 的查询在 PHPMyAdmin 中 运行 时看起来并不慢?
Why MySQL query from mysql-slow-log is not appearing to be slow when run in PHPMyAdmin?
我有一个查询负责客户列表的输出,用户经常运行。
查询是:
SELECT SQL_CALC_FOUND_ROWS p.lname, p.fname, p.patronymic, p.job,
p.post, p.zip, p.city, p.address, p.id, p.additional,
p.people_type_id, p.gender, p.permissions, p.user_id,
p.user_id, p.grading, p.progress, p.full_name, p.b1a,
p.b1b, p.b1c, p.b2a, p.b2b, p.b2c, p.b3a, p.b3b, p.b3c,
p.b4a, p.b4b, p.b4c, p.b5a, p.b5b, p.b5c, p.b6a, p.b6b,
p.b6c, p.b7a, p.b7b, p.b7c, p.b8a, p.b8b, p.b8c, p.b9a,
p.b9b, p.b9c, p.b10a, p.b10b, p.b10c, p.b11a, p.b11b,
p.b11c, p.b12a, p.b12b, p.b12c, p.b13a, p.b13b, p.b13c,
p.b14a, p.b14b, p.b14c, p.b15a, p.b15b, p.b15c, p.b16a,
p.b16b, p.b16c, p.b17a, p.b17b, p.count, p.finish_count,
p.partyId, t.description, a.description, p.contact_through,
DATE_FORMAT(p.next_call, '%d-%m-%Y') as next_call, p.recruiter,
p.b17c, p.l1a, p.l1b, p.l1c, p.l2a, p.l2b, p.l2c, p.l3a,
p.l3b, p.l3c, p.l4a, p.l4b, p.l4c, p.l5a, p.l5b, p.l5c,
p.l6a, p.l6b, p.l6c, p.l7a, p.l7b, p.l7c, p.l8a, p.l8b,
p.l8c, p.l9a, p.l9b, p.l9c, p.l10a, p.l10b, p.l10c, p.l11a,
p.l11b, p.l11c, p.l12a, p.l12b, p.l12c, p.l13a, p.l13b,
p.l13c, p.l14a, p.l14b, p.l14c, p.c1a, p.c1b, p.c1c, p.c2a,
p.c2b, p.c2c, p.c3a, p.c3b, p.c3c, p.c4a, p.c4b, p.c4c,
p.c5a, p.c5b, p.c5c, p.c6a, p.c6b, p.c6c, p.c7a, p.c7b,
p.c7c, p.c8a, p.c8b, p.c8c, p.c9a, p.c9b, p.c9c, p.c10a,
p.c10b, p.c10c, p.c11a, p.c11b, p.c11c, p.c12a, p.c12b,
p.c12c, p.c13a, p.c13b, p.c13c, p.c14a, p.c14b, p.c14c,
p.c15a, p.c15b, p.c15c, p.c16a, p.c16b, p.c16c, p.c17a,
p.c17b, p.c17c, p.c18a, p.c18b, p.c18c, p.c19a, p.c19b,
p.c19c, p.c20a, p.c20b, p.c20c, p.c21a, p.c21b, p.c21c
FROM people p
JOIN people_progress_id a ON p.progress = a.proc_level_id
JOIN people_grading_id t ON p.grading = t.grading_level_id
WHERE p.category=3
and p.status = 1
ORDER BY p.city desc
LIMIT 0, 50;
它会定期记录到 mysql-慢查询日志,类似于:
# Time: 160718 17:18:32
# User@Host: server[server] @ localhost []
# Query_time: 4.098162 Lock_time: 0.000255 Rows_sent: 50 Rows_examined: 1508127
SET timestamp=1468851512;
SELECT SQL_CALC_FOUND_ROWS p.lname...
但是当我 运行 在 PHPMyAdmin 中执行此操作时,执行时间不到一秒。发生这种情况有什么原因吗? 我怎样才能加快速度?
您需要更改 my.ini 文件以捕获慢速查询。您需要设置以下参数
- slow_query_log 应该是 ON
- log_slow_queries = 5; (这意味着 MySql 记录超过 5 秒的查询)
谢谢,
拉凯什
添加INDEX(category, status, city)
重新考虑转储那么多数据——用户真的需要那么多东西吗?
重新考虑如何获取 "calc found rows"——要么将其从 UI 中删除,要么研究缓存 and/or 近似值的方法。
重新考虑您是否真的需要 t.description, a.description
-- JOINs
正在损害性能(一些)。
(并且,如前所述,查询缓存可能会混淆时间。只需将 LIMIT 0,50
更改为 LIMIT 0,51
即可阻止 QC 启动。当然,SQL_NO_CACHE
更好。)
我有一个查询负责客户列表的输出,用户经常运行。
查询是:
SELECT SQL_CALC_FOUND_ROWS p.lname, p.fname, p.patronymic, p.job,
p.post, p.zip, p.city, p.address, p.id, p.additional,
p.people_type_id, p.gender, p.permissions, p.user_id,
p.user_id, p.grading, p.progress, p.full_name, p.b1a,
p.b1b, p.b1c, p.b2a, p.b2b, p.b2c, p.b3a, p.b3b, p.b3c,
p.b4a, p.b4b, p.b4c, p.b5a, p.b5b, p.b5c, p.b6a, p.b6b,
p.b6c, p.b7a, p.b7b, p.b7c, p.b8a, p.b8b, p.b8c, p.b9a,
p.b9b, p.b9c, p.b10a, p.b10b, p.b10c, p.b11a, p.b11b,
p.b11c, p.b12a, p.b12b, p.b12c, p.b13a, p.b13b, p.b13c,
p.b14a, p.b14b, p.b14c, p.b15a, p.b15b, p.b15c, p.b16a,
p.b16b, p.b16c, p.b17a, p.b17b, p.count, p.finish_count,
p.partyId, t.description, a.description, p.contact_through,
DATE_FORMAT(p.next_call, '%d-%m-%Y') as next_call, p.recruiter,
p.b17c, p.l1a, p.l1b, p.l1c, p.l2a, p.l2b, p.l2c, p.l3a,
p.l3b, p.l3c, p.l4a, p.l4b, p.l4c, p.l5a, p.l5b, p.l5c,
p.l6a, p.l6b, p.l6c, p.l7a, p.l7b, p.l7c, p.l8a, p.l8b,
p.l8c, p.l9a, p.l9b, p.l9c, p.l10a, p.l10b, p.l10c, p.l11a,
p.l11b, p.l11c, p.l12a, p.l12b, p.l12c, p.l13a, p.l13b,
p.l13c, p.l14a, p.l14b, p.l14c, p.c1a, p.c1b, p.c1c, p.c2a,
p.c2b, p.c2c, p.c3a, p.c3b, p.c3c, p.c4a, p.c4b, p.c4c,
p.c5a, p.c5b, p.c5c, p.c6a, p.c6b, p.c6c, p.c7a, p.c7b,
p.c7c, p.c8a, p.c8b, p.c8c, p.c9a, p.c9b, p.c9c, p.c10a,
p.c10b, p.c10c, p.c11a, p.c11b, p.c11c, p.c12a, p.c12b,
p.c12c, p.c13a, p.c13b, p.c13c, p.c14a, p.c14b, p.c14c,
p.c15a, p.c15b, p.c15c, p.c16a, p.c16b, p.c16c, p.c17a,
p.c17b, p.c17c, p.c18a, p.c18b, p.c18c, p.c19a, p.c19b,
p.c19c, p.c20a, p.c20b, p.c20c, p.c21a, p.c21b, p.c21c
FROM people p
JOIN people_progress_id a ON p.progress = a.proc_level_id
JOIN people_grading_id t ON p.grading = t.grading_level_id
WHERE p.category=3
and p.status = 1
ORDER BY p.city desc
LIMIT 0, 50;
它会定期记录到 mysql-慢查询日志,类似于:
# Time: 160718 17:18:32
# User@Host: server[server] @ localhost []
# Query_time: 4.098162 Lock_time: 0.000255 Rows_sent: 50 Rows_examined: 1508127
SET timestamp=1468851512;
SELECT SQL_CALC_FOUND_ROWS p.lname...
但是当我 运行 在 PHPMyAdmin 中执行此操作时,执行时间不到一秒。发生这种情况有什么原因吗? 我怎样才能加快速度?
您需要更改 my.ini 文件以捕获慢速查询。您需要设置以下参数
- slow_query_log 应该是 ON
- log_slow_queries = 5; (这意味着 MySql 记录超过 5 秒的查询)
谢谢, 拉凯什
添加
INDEX(category, status, city)
重新考虑转储那么多数据——用户真的需要那么多东西吗?
重新考虑如何获取 "calc found rows"——要么将其从 UI 中删除,要么研究缓存 and/or 近似值的方法。
重新考虑您是否真的需要
t.description, a.description
--JOINs
正在损害性能(一些)。
(并且,如前所述,查询缓存可能会混淆时间。只需将 LIMIT 0,50
更改为 LIMIT 0,51
即可阻止 QC 启动。当然,SQL_NO_CACHE
更好。)