如果查詢是在生產(chǎn)中頻繁運(yùn)行的查詢,那麼我認(rèn)為您的目標(biāo)是落後的。我建議您應(yīng)該執(zhí)行查詢兩次,並使用第二次查詢的計(jì)時(shí)。這樣,它更接近生產(chǎn)將看到的內(nèi)容——數(shù)據(jù)已在快取中。
(Bill 解釋說(shuō)「查詢快取」無(wú)關(guān)緊要,「緩衝池」相關(guān)。)
這是我喜歡的一種測(cè)試查詢的技術(shù),無(wú)需建立足夠大的表來(lái)查看時(shí)間變化:
FLUSH STATUS; SELECT ...; SHOW SESSION STATUS LIKE 'Handler%';
這些數(shù)字是資料或索引行的實(shí)際讀/寫(xiě)次數(shù)。數(shù)字可能看起來(lái)像輸出行數(shù)、表格中的行數(shù)等。這可以讓您了解是否存在例如全表(或索引)掃描。非零“Handler_write%”值表示需要一個(gè)臨時(shí)表(或多個(gè)表)。
如果您的版本可用,請(qǐng)另參閱EXPLAIN ANALYZE
。
更多提示:索引食譜
#您連結(jié)到的問(wèn)題是關(guān)於查詢快取的,該快取在 MySQL 8.0 中已被刪除,因此無(wú)需再清除它。
您的措詞表明您正在詢問(wèn)緩衝池,這與查詢快取不同。緩衝池快取資料和索引頁(yè),而查詢快?。ㄈ绻嬖冢┛烊〔樵兘Y(jié)果。
沒(méi)有指令可以在不重新啟動(dòng) MySQL 伺服器的情況下清除緩衝池。頁(yè)面一直緩存在緩衝池中,直到被其他頁(yè)面驅(qū)逐。
緩衝池位於 RAM 中,因此如果重新啟動(dòng) MySQL 伺服器進(jìn)程,其內(nèi)容將會(huì)清除。因此,如果您想從頭開(kāi)始,則需要重新啟動(dòng)該進(jìn)程(不需要重新啟動(dòng)整個(gè)作業(yè)系統(tǒng),只需重新啟動(dòng) MySQL 服務(wù))。
要注意的是,在 MySQL 8.0 中,重新啟動(dòng)時(shí)緩衝池的內(nèi)容不會(huì)完全清除。緩衝池內(nèi)容的一定百分比在關(guān)閉期間儲(chǔ)存,並在啟動(dòng)時(shí)自動(dòng)重新載入。此功能預(yù)設(shè)為啟用,但您可以選擇停用它。
了解更多相關(guān)資訊: