您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么在MySQL中查詢回表”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
我們先來看看什么是回表?
通俗的講就是,如果索引的列在 select 所需獲得的列中(因為在 mysql 中索引是根據索引列的值進行排序的,所以索引節點中存在該列中的部分值)或者根據一次索引查詢就能獲得記錄就不需要回表,如果 select 所需獲得列中有大量的非索引列,索引就需要到表中找到相應的列的信息,這就叫回表。
根據這個概念,當你使用 Explain 執行查詢計劃時,當結果中 Extra 出現了 using index、using where、using index condition 等你就認為使用了過濾條件,使用了索引,SQL 優化的還不錯。這其實是一種錯誤的認識。
因為,使用了索引并不代表查詢就最優。從 using index condition、using index & using where 等可以看出,這條 SQL 語句其實是進行了回表的。
還有些時候,你查看 Explain 執行計劃后,發現明明走了索引,為什么還是慢?這里面可能就是存在回表了。下面我們通過一個例子來說明什么是回表。先創建一張表,sql 語句如下:
create table xttblog(
id int primary key,
k int not null,
name varchar(16),
index (k)
)engine = InnoDB;
然后,我們再執行下面的 SQL 語句,插入幾條測試數據。
假設,現在我們要查詢出 id 為 2 的數據。那么執行 select * from xttblog where ID = 2; 這條 SQL 語句就不需要回表。原因是根據主鍵的查詢方式,則只需要搜索 ID 這棵 B+ 樹。主鍵是唯一的,根據這個唯一的索引,MySQL 就能確定搜索的記錄。
但當我們使用 k 這個索引來查詢 k = 2 的記錄時就要用到回表。select * from xttblog where k = 2; 原因是通過 k 這個普通索引查詢方式,則需要先搜索 k 索引樹,然后得到主鍵 ID 的值為 1,再到 ID 索引樹搜索一次。這個過程雖然用了索引,但實際上底層進行了兩次索引查詢,這個過程就稱為回表。
也就是說,基于非主鍵索引的查詢需要多掃描一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。
我這里表里的數據量比較少,如果數據量大的話,你能很明顯的看出兩次查詢所用的時間,很明顯使用主鍵查詢效率更高。
“怎么在MySQL中查詢回表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。