在 MySQL 數據庫中,查詢回表是指在執行查詢語句時,需要到數據表中查找匹配條件的記錄,進而返回結果集。
什么是回表?回表是指 MySQL 優化器使用了覆蓋索引來滿足一個查詢時,但查詢的需要的所有字段都不在該索引中,因此,MySQL 需要再次回到這個對應的數據表中查找這些字段,這個過程就稱為回表。
例如,如果我們執行以下語句:
SELECT name, age FROM users WHERE id = 100;
如果表 users 中有一個適合的索引,那么 MySQL 可能會決定使用覆蓋索引來避免通過回表操作來獲取數據。所謂覆蓋索引就是指索引中的所有數據都能滿足查詢的條件和查詢所需要的字段。
然而,我們的查詢語句并不只是需要 id 字段,還需要姓名和年齡。因此,MySQL 需要回到 users 表中,查找 id 為 100 的用戶,并返回他們的姓名和年齡。
回表的代價往往比直接從索引中獲取數據的代價更高,因為 MySQL 必須訪問并讀取更多的數據塊(block)來恢復需要的列。這也是為什么我們在設計數據庫時應該盡可能使用含有所有需要查詢列的索引。除此之外,限制查詢所需要返回的行和列的數量,以降低查詢操作的成本也是一個不錯的決策。
下一篇mysql查詢唯一存在