什么是回表
回表是數據庫查詢優化中常用的技術。當我們在查詢一張含有多個字段的表時,如果需要返回的字段不是全部的字段,那么在查詢時,就需要先根據條件查詢出記錄所在的行(使用索引),然后再去讀取磁盤中的對應記錄并返回結果。這個過程中,查詢記錄所在行的步驟就是回表。
哪些情況下不用回表
在MySQL中,有些情況下不需要進行回表操作,這可以讓查詢更快。下面列出了一些情況。
使用 covering Index 查詢:當查詢所需要的字段都被包含在了一個索引中時,MySQL 可以直接從索引樹中讀取數據,而不是回表。
使用輔助索引掃描完成查詢需求:查詢時如果不需要返回全部記錄,那么如果用含有查詢條件的輔助索引進行掃描,就可以直接將輔助索引中的字段全部讀取,避免了回表操作。
使用Cluster Index查詢:MySQL InnoDB 存儲引擎中,對于使用主鍵的表,主鍵值和其它數據都保存在了同一個 B-Tree 中,這樣當通過主鍵進行查詢時,就可以避免回表操作,直接從 B-Tree 結構中讀取數據。
如何避免回表的出現
想要避免回表的出現,我們可以做的有很多。
盡量使用 covering index 查詢(即索引覆蓋)。
對于查詢時需要的字段,都在輔助索引中設置,正常查詢時只需要掃描輔助索引即可。
在設計數據表時,可以通過 Cluster Index 技術,將主鍵和其它字段保存在同一個 B-Tree 中。
盡量使用聚集索引。
結尾
回表技術在數據庫查詢優化中起到了重要的作用。但是,如果沒有必要,我們又應該盡量避免它的出現。合適的索引、數據表設計和優化,可以有效地降低回表的發生頻率,提高查詢效率。
下一篇邊框內文字下移css