MySQLのクエリの性能評価の一環として、クエリにかかった時間を確認することがあったのでメモ。
前提
MySQLは8.1系を利用しています。
selectにかかった時間の確認
explain analyze コマンドを実行することで、実際にクエリを投げてみた結果が確認できます。
explain analyze
select * from ... //自分が確認したいクエリ
actual time の欄で実際にクエリにかかった時間を確認できます。単位はミリ秒です。コマンド実行結果に、actual time
という項目があり、2つ目の値が実際にクエリにかかった時間となります。
//(actual time=0.017..0.019 rows=15 loops=1)
1つ目の時間(0.017)は最初の行を返すまでの時間、
2つ目の時間(0.19)が全部の行を返すまでの時間
performance_schemaを用いた時間の確認
performance_schema
という別の方法を使っても計測することが可能です。
以下の設定値がONになっていれば確認できます。
SHOW VARIABLES LIKE 'performance_schema';
以下のコマンドを実行します。
SELECT EVENT_ID, SQL_TEXT, TIMER_START, TIMER_END,
ROUND((TIMER_END - TIMER_START) / 1000000, 3) AS exec_time_ns
FROM performance_schema.events_statements_history
WHERE SQL_TEXT LIKE '検索したいクエリ' // 自分が確認したいクエリを入力
ORDER BY EVENT_ID DESC
TIME_START
, TIME_END
の単位には注意が必要です。適宜ns, msなどに単位変換すると見やすくなると思います。
https://dev.mysql.com/doc/refman/8.0/ja/performance-schema-events-statements-current-table.html
TIME_START
,TIME_END
は単位がこれらの値の単位はピコ秒 (秒の 1 兆分の 1)
まとめ
参考にした資料をいかに共有します。
リンク
リンク