中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在MySQL中查詢回表

發布時間:2021-09-16 15:59:20 來源:億速云 閱讀:167 作者:chen 欄目:云計算

本篇內容介紹了“怎么在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 語句,插入幾條測試數據。

怎么在MySQL中查詢回表

假設,現在我們要查詢出 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中查詢回表    

“怎么在MySQL中查詢回表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄龙县| 油尖旺区| 石嘴山市| 乌海市| 深州市| 英德市| 新邵县| 吕梁市| 龙川县| 阿巴嘎旗| 澳门| 交口县| 碌曲县| 翁牛特旗| 吉安县| 开江县| 西充县| 紫阳县| 达日县| 兰州市| 赣州市| 凤阳县| 普兰店市| 宁陵县| 柘荣县| 砀山县| 当阳市| 新干县| 同仁县| 上蔡县| 祁门县| 陇南市| 灵璧县| 永川市| 池州市| 文昌市| 囊谦县| 克什克腾旗| 梓潼县| 安远县| 疏勒县|