亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎么在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

房山区| 晋城| 南乐县| 三明市| 伊春市| 光泽县| 于都县| 德兴市| 开封县| 合肥市| 弥渡县| 惠安县| 新河县| 新营市| 临湘市| 司法| 临安市| 资中县| 赤城县| 明光市| 乡城县| 甘德县| 正宁县| 秀山| 津南区| 佛坪县| 平安县| 女性| 班玛县| 双牌县| 高邮市| 如皋市| 明星| 铜梁县| 五常市| 兴隆县| 六盘水市| 叶城县| 文昌市| 长乐市| 武定县|