P粉1954022922023-08-28 22:21:18
如果查詢是在生產中頻繁運行的查詢,那麼我認為您的目標是落後的。我建議您應該執行查詢兩次,並使用第二次查詢的計時。這樣,它更接近生產將看到的內容——數據已在快取中。
(Bill 解釋說「查詢快取」無關緊要,「緩衝池」相關。)
這是我喜歡的一種測試查詢的技術,無需建立足夠大的表來查看時間變化:
FLUSH STATUS; SELECT ...; SHOW SESSION STATUS LIKE 'Handler%';
這些數字是資料或索引行的實際讀/寫次數。數字可能看起來像輸出行數、表格中的行數等。這可以讓您了解是否存在例如全表(或索引)掃描。非零“Handler_write%”值表示需要一個臨時表(或多個表)。
如果您的版本可用,請另參閱EXPLAIN ANALYZE
。
更多提示:索引食譜
#P粉8059312812023-08-28 15:59:55
您連結到的問題是關於查詢快取的,該快取在 MySQL 8.0 中已被刪除,因此無需再清除它。
您的措詞表明您正在詢問緩衝池,這與查詢快取不同。緩衝池快取資料和索引頁,而查詢快取(如果存在)快取查詢結果。
沒有指令可以在不重新啟動 MySQL 伺服器的情況下清除緩衝池。頁面一直緩存在緩衝池中,直到被其他頁面驅逐。
緩衝池位於 RAM 中,因此如果重新啟動 MySQL 伺服器進程,其內容將會清除。因此,如果您想從頭開始,則需要重新啟動該進程(不需要重新啟動整個作業系統,只需重新啟動 MySQL 服務)。
要注意的是,在 MySQL 8.0 中,重新啟動時緩衝池的內容不會完全清除。緩衝池內容的一定百分比在關閉期間儲存,並在啟動時自動重新載入。此功能預設為啟用,但您可以選擇停用它。
了解更多相關資訊: