Mysql

MySQL Handler_read_rnd_next == 沒有索引的表掃描?

  • June 29, 2012

我正在調整我們的 Percona 5.5 伺服器,並且一直在使用 percona 的工具來繪製我們數據庫的性能。在 MySQL 處理程序圖中,我注意到很多“Handler_read_rnd_next”呼叫。

在 mysql dev 文件中進行了一些探勘之後,這個處理程序應該表明:“這表明您的表沒有正確索引,或者您的查詢沒有寫入以利用您擁有的索引

然後,我開始在 tcpdump 和 mk-query-digest(btw 很棒的工具)的幫助下分析我們對非索引呼叫的查詢,並提供以下選項:

    • 篩選 ‘( $ event->{No_index_used} eq “Yes” || $ 事件->{No_good_index_used} eq “Yes”)’

但我畫了一個空白:所有被列為不使用索引的查詢都是在某處具有“派生”選擇類型的查詢,所有查詢都在幾毫秒內完成。

因此我的問題是:如果派生選擇類型是唯一沒有索引的選擇類型,那麼我的 Handler_read_rnd_next 實例來自哪裡?我將不勝感激任何幫助我試圖找出問題所在。

謝謝!

您應該啟用slow-query-loglog-queries-not-using-indexes以顯示在索引上跳過了哪些查詢。

這只是個人喜好,但我通常使用mk-query-digest的 –processlist 選項。我很久以前為它寫了一個自動化腳本:MySQL general query log performance effects based on Percona’s video about mk-query-digest is a replacement for the slow log

一旦知道查詢,您將在所有選擇上執行 EXPLAIN。任何 EXPLAIN 計劃未能選擇索引的查詢都屬於執行表掃描。

引用自:https://dba.stackexchange.com/questions/20147