在MySQL中,默認(rèn)情況下,在執(zhí)行SQL語(yǔ)句后,只會(huì)顯示執(zhí)行時(shí)間的整秒數(shù)。但有時(shí)候,我們需要對(duì)SQL執(zhí)行時(shí)間進(jìn)行更精確的測(cè)量,就需要將執(zhí)行時(shí)間顯示為毫秒。 接下來,我們會(huì)介紹如何在MySQL中顯示SQL執(zhí)行時(shí)間的毫秒部分。
-- 開啟SQL執(zhí)行時(shí)間顯示 SET profiling = 1; -- 執(zhí)行需要測(cè)量的SQL語(yǔ)句 SELECT * FROM `table`; -- 查看SQL的執(zhí)行時(shí)間以及其他性能指標(biāo) SHOW PROFILE;
上述代碼中,SET profiling = 1; 表示開啟SQL執(zhí)行時(shí)間的記錄功能。執(zhí)行需要測(cè)量的SQL語(yǔ)句后,可以使用 SHOW PROFILE; 查看SQL的執(zhí)行時(shí)間以及其他指標(biāo),比如I/O等待、鎖等待等。
MySQL的執(zhí)行時(shí)間記錄粒度最高只能記錄到微秒級(jí)別,即1秒 = 1,000,000 微秒,因此在默認(rèn)情況下,只能看到整秒的執(zhí)行時(shí)間。然而,我們可以通過以下代碼來將MySQL的執(zhí)行時(shí)間顯示為毫秒級(jí)別:
-- 開啟SQL執(zhí)行時(shí)間記錄功能,設(shè)置記錄精度為0.000001秒 SET profiling = 1; SET profiling_history_size = 1; SET profiling_history_unit = 'usec'; -- 執(zhí)行SQL語(yǔ)句 SELECT * FROM `table`; -- 查看執(zhí)行時(shí)間,注意觀察Query Duration列 SHOW PROFILES;
需要注意的是,在MySQL 5.7之前,以上代碼中需要手動(dòng)設(shè)置profiling_history_size和profiling_history_unit參數(shù)。而在MySQL 5.7之后,設(shè)置profiling_history_size參數(shù)就已經(jīng)足夠了。
通過以上方法,我們可以將MySQL的SQL執(zhí)行時(shí)間顯示為毫秒級(jí)別,方便我們更加精確地評(píng)估SQL的性能表現(xiàn)。