欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql回表查詢是什么,回表查詢的使用

 更新時間:2022年11月21日 09:01:21   作者:小小少年_  
這篇文章主要介紹了mysql回表查詢是什么,回表查詢的使用方式,具有很好的參考價值,希望對大家有所幫助。

在說到什么是回表查詢的時候,有兩個概念需要先解釋清楚:分別是聚集索引(聚簇索引)和非聚集索引(非聚簇索引)

聚集索引和非聚集索引

MySQL規(guī)定,在使用InnoDB存儲引擎的時候,必須且僅有一個聚集索引,非聚集索引也就是普通索引就看自己設(shè)置的有多少個了

聚集索引和非聚集索引的區(qū)別

1.聚集索引中的非葉子節(jié)點存儲的是表的主鍵,非聚集索引的非葉子節(jié)點存儲的是自己設(shè)置的索引字段對應(yīng)的值(如果是聯(lián)合索引,那就是聯(lián)合索引的幾個字段對應(yīng)的值)

2.聚集索引的葉子節(jié)點,存儲著當(dāng)前表中每條記錄的所有信息;非聚集索引的葉子節(jié)點,只存儲當(dāng)前記錄對應(yīng)的主鍵ID(也就是聚集索引的非葉子節(jié)點存儲的值)

下面這張圖是在網(wǎng)上找的一張截圖

大致就是這個意思:左邊的是主鍵索引(聚集索引),右邊的是普通索引(非聚集索引)

那回表是什么

如果是通過非主鍵索引進(jìn)行查詢,select所要獲取的字段不能通過非主鍵索引獲取到,需要通過非主鍵索引獲取到的主鍵,從聚集索引再次查詢一遍,獲取到所要查詢的記錄,這個查詢的過程就是回表

  • 通過執(zhí)行計劃的Extra字段的值,可以看到當(dāng)前sql是否進(jìn)行了回表
  • 如果Extra字段值為null,我不太確定是否是一定走回表的(待確認(rèn))
  • 但是如果Extra為Using index,則表示當(dāng)前查詢,通過索引覆蓋就可以獲取到當(dāng)前select要的值,無需通過回表查詢記錄

驗證

create TABLE hui_biao_test (id int not null auto_increment,name varchar(20),age int(11),first_name varchar(20),CONSTRAINT pk_id PRIMARY KEY(id));
create index index_name on `hui_biao_test`(name);

這是我的sql,創(chuàng)建了一張表,

explain select id,name from `hui_biao_test` where name = '張三';
explain select name from `hui_biao_test` where name = '張三';
explain select name,age from `hui_biao_test` where name = '張三';

下面截圖分別是這三個sql的執(zhí)行計劃,可以發(fā)現(xiàn):

第一個sql和第二個sql的Extra是Using index,說明前兩個sql是索引覆蓋,無需回表即可查詢到當(dāng)前要用的數(shù)據(jù);

但是第三個sql就不可以,因為有一個age字段,在name這個索引中,沒有age字段的信息,只有id和name(name索引對應(yīng)的B+樹中的非葉子節(jié)點就是name字段的值,id就是葉子節(jié)點存儲的元素),所以需要通過回表,去主鍵索引查詢到對應(yīng)的記錄,然后獲取到對應(yīng)的age屬性

假如說我把name和age設(shè)置為聯(lián)合索引,那最后一個sql的執(zhí)行計劃就會有變化

可以看到,這個sql的執(zhí)行計劃中Extra就是Using index

說明當(dāng)前聯(lián)合索引的非葉子節(jié)點中,存儲的是聯(lián)合索引對應(yīng)的信息;僅通過聯(lián)合索引就可以獲取到select所需要的信息,這樣,就無須再經(jīng)過主鍵索引查詢了

所以,這就是回表的概念

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你用eclipse連接mysql數(shù)據(jù)庫

    教你用eclipse連接mysql數(shù)據(jù)庫

    這篇文章主要介紹了教你用eclipse連接mysql數(shù)據(jù)庫,文中有非常詳細(xì)的圖文示例,對不會鏈接mysql的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • 基于MySQL實現(xiàn)基礎(chǔ)圖數(shù)據(jù)庫的詳細(xì)步驟

    基于MySQL實現(xiàn)基礎(chǔ)圖數(shù)據(jù)庫的詳細(xì)步驟

    圖數(shù)據(jù)庫是一種用于存儲和查詢具有復(fù)雜關(guān)系的數(shù)據(jù)的數(shù)據(jù)庫,能夠快速地查詢和處理節(jié)點之間的關(guān)系,本文將使用MySQL實現(xiàn)一個基礎(chǔ)的圖數(shù)據(jù)庫,有需要的小伙伴可以了解下
    2025-07-07
  • 一文帶你將csv文件導(dǎo)入到mysql數(shù)據(jù)庫(親測有效)

    一文帶你將csv文件導(dǎo)入到mysql數(shù)據(jù)庫(親測有效)

    一直不大懂csv怎么通過mysql圖形化的界面直接導(dǎo)入,看了很多帖,才覺得自己會了,下面這篇文章主要給大家介紹了關(guān)于將csv文件導(dǎo)入到mysql數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • MySQL存儲過程中sql語句條件的in無效問題及解決

    MySQL存儲過程中sql語句條件的in無效問題及解決

    這篇文章主要介紹了MySQL存儲過程中sql語句條件的in無效問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL允許遠(yuǎn)程連接的配置指南

    MySQL允許遠(yuǎn)程連接的配置指南

    MySQL 是一個廣泛使用的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在實際開發(fā)中,我們經(jīng)常需要從本地或外部服務(wù)器連接到 MySQL 數(shù)據(jù)庫,下面我們就來看看如何配置 MySQL 以允許遠(yuǎn)程連接
    2025-06-06
  • mysql5.7.42到mysql8.2.0的升級(rpm方式)

    mysql5.7.42到mysql8.2.0的升級(rpm方式)

    隨著數(shù)據(jù)量的增長和業(yè)務(wù)需求的變更,我們可能需要升級MySQL,本文主要介紹了mysql5.7.42到mysql8.2.0的升級(rpm方式),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • nacos無法連接mysql的解決方法

    nacos無法連接mysql的解決方法

    這篇文章主要介紹了nacos無法連接mysql的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL limit分頁大偏移量慢的原因及優(yōu)化方案

    MySQL limit分頁大偏移量慢的原因及優(yōu)化方案

    這篇文章主要介紹了MySQL limit分頁大偏移量慢的原因及優(yōu)化方案,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • Mysql數(shù)據(jù)庫的主從同步配置方式

    Mysql數(shù)據(jù)庫的主從同步配置方式

    這篇文章主要介紹了Mysql數(shù)據(jù)庫的主從同步配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • ERROR 1862 (HY000): Your password has expired. To log in you must change it using a .....

    ERROR 1862 (HY000): Your password has expired. To log in you

    當(dāng)你在安裝 MySQL過程中,通過mysqld --initialize 初始化 mysql 操作后,生成臨時密碼后,沒有直接進(jìn)行 MySQL連接,中途重啟服務(wù)或者重啟機(jī)器等,導(dǎo)致密碼失效問題,怎么處理呢,感興趣的朋友一起看看吧
    2019-11-11

最新評論