#mysql #sql-tuning #database-tuning
#mysql #sql-настройка #настройка базы данных
Вопрос:
Может ли кто-нибудь помочь мне с этим вопросом?
Когда я выполняю команду SHOW PROFILES, я получаю продолжительность времени, которая отличается от команды SHOW PROFILE (без «S»), в данном случае, какую из них я должен учитывать?
например: для ПРОФИЛЕЙ ОТОБРАЖЕНИЯ
query | DURATION
53 0.08104775
для ПОЛУЧЕНИЯ ИНФОРМАЦИИ_SCHEMA.ПРОФИЛИРОВАНИЕ (ПОКАЗАТЬ ПРОФИЛЬ)
SET @query_id := 53;
SELECT SUM(Total_R) FROM (
SELECT STATE, SUM(DURATION) AS Total_R,
ROUND(
100 * SUM(DURATION) /
(SELECT SUM(DURATION)
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = @query_id
), 2) AS Pct_R,
COUNT(*) AS Calls,
SUM(DURATION) / COUNT(*) AS "R/Call"
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = @query_id
GROUP BY STATE
ORDER BY Total_R DESC ) AS X ;
query | TOTAL DURATION
53 0.000430
Я запутался в том, какое время является правильным.
Ответ №1:
Простой запрос SUM (…), похоже, выдает практически то же значение, что и столбец SHOW PROFILES «продолжительность»:
mysql> SET profiling = 1;
mysql> SELECT SQRT(100);
-----------
| SQRT(100) |
-----------
| 10 |
-----------
1 row in set (0.02 sec)
mysql> SHOW PROFILES;
---------- ------------ ------------------
| Query_ID | Duration | Query |
---------- ------------ ------------------
| 1 | 0.00010700 | SELECT SQRT(100) |
---------- ------------ ------------------
1 row in set, 1 warning (0.01 sec)
mysql> SELECT SUM(DURATION) FROM information_schema.PROFILING WHERE QUERY_ID = 1;
---------------
| SUM(DURATION) |
---------------
| 0.000108 |
---------------
(протестировано на MySQL 5.1 и Percona 8.0)
Я пока не понимаю разницы между значениями продолжительности профилирования (0.000107 и 0.000108) и временем, указанным прямо под результатом запроса («1 строка в наборе (0.02 сек)»).