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

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

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

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

聚集索引和非聚集索引

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

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

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

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

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

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

那回表是什么

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

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

驗(yàn)證

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 = '張三';

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

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

但是第三個(gè)sql就不可以,因?yàn)橛幸粋€(gè)age字段,在name這個(gè)索引中,沒有age字段的信息,只有id和name(name索引對(duì)應(yīng)的B+樹中的非葉子節(jié)點(diǎn)就是name字段的值,id就是葉子節(jié)點(diǎn)存儲(chǔ)的元素),所以需要通過(guò)回表,去主鍵索引查詢到對(duì)應(yīng)的記錄,然后獲取到對(duì)應(yīng)的age屬性

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

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

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

所以,這就是回表的概念

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

相關(guān)文章

  • mysql 發(fā)生系統(tǒng)錯(cuò)誤1067的解決方法

    mysql 發(fā)生系統(tǒng)錯(cuò)誤1067的解決方法

    今天要把WEB項(xiàng)目打包成EXE,可是在數(shù)據(jù)庫(kù)上卡住了。在啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)的時(shí)候發(fā)生系統(tǒng)錯(cuò)誤 1067。
    2009-09-09
  • 最新版MySQL 8.0.22下載安裝超詳細(xì)教程(Windows 64位)

    最新版MySQL 8.0.22下載安裝超詳細(xì)教程(Windows 64位)

    這篇文章主要介紹了最新版MySQL 8.0.22下載安裝超詳細(xì)教程(Windows 64位),本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • MySQL過(guò)濾重復(fù)數(shù)據(jù)的兩種方法示例

    MySQL過(guò)濾重復(fù)數(shù)據(jù)的兩種方法示例

    數(shù)據(jù)庫(kù)生成環(huán)境中經(jīng)常會(huì)遇到表中有重復(fù)的數(shù)據(jù),或者進(jìn)行關(guān)聯(lián)過(guò)程中產(chǎn)生重復(fù)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL過(guò)濾重復(fù)數(shù)據(jù)的兩種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Mysql數(shù)據(jù)庫(kù)如何使用DELETE語(yǔ)句從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)(數(shù)據(jù)庫(kù)數(shù)據(jù)刪除)

    Mysql數(shù)據(jù)庫(kù)如何使用DELETE語(yǔ)句從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)(數(shù)據(jù)庫(kù)數(shù)據(jù)刪除)

    DELETE語(yǔ)句是SQL中的一個(gè)重要功能,允許用戶根據(jù)特定條件刪除表中的數(shù)據(jù)行,在本文中,我們探討了如何使用DELETE語(yǔ)句從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • MySQL 設(shè)計(jì)和命令行模式下建立詳解

    MySQL 設(shè)計(jì)和命令行模式下建立詳解

    這篇文章主要介紹了MySQL 設(shè)計(jì)和命令行模式下建立詳解的相關(guān)資料,主要講解了數(shù)據(jù)庫(kù)的建立與數(shù)據(jù)表的設(shè)計(jì),需要的朋友可以參考下
    2017-01-01
  • 解決Mysql建表時(shí)報(bào)錯(cuò)invalid?ON?UPDATE?clause?for?'create_date'?column

    解決Mysql建表時(shí)報(bào)錯(cuò)invalid?ON?UPDATE?clause?for?'create_d

    這篇文章主要介紹了解決Mysql建表時(shí)報(bào)錯(cuò)invalid?ON?UPDATE?clause?for?'create_date'?column問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 獲取MySQL的表中每個(gè)userid最后一條記錄的方法

    獲取MySQL的表中每個(gè)userid最后一條記錄的方法

    這篇文章主要介紹了獲取MySQL的表中每個(gè)userid最后一條記錄的方法,并且針對(duì)userid不唯一的情況,需要的朋友可以參考下
    2015-05-05
  • mysql?count?為null時(shí),顯示0的問(wèn)題

    mysql?count?為null時(shí),顯示0的問(wèn)題

    這篇文章主要介紹了mysql?count?為null時(shí),顯示0的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MYSQL8如何快速修改root密碼

    MYSQL8如何快速修改root密碼

    MySQL8的改密碼跟MySQL5不同,很多朋友都遇到過(guò)這個(gè)問(wèn)題,今天小編給大家講解下MYSQL8如何快速修改root密碼,需要的朋友可以參考下
    2023-05-05
  • Mysql DBA 20天速成教程

    Mysql DBA 20天速成教程

    準(zhǔn)備一臺(tái)pc,一根網(wǎng)線和20天無(wú)打擾的空余時(shí)間,把MySQL 5.1參考手冊(cè)設(shè)置為瀏覽器首頁(yè),按下面列表逐條學(xué)習(xí)即可,這本中文手冊(cè)包括基本上所有的內(nèi)容,補(bǔ)充知識(shí)google也都能查到,學(xué)習(xí)平臺(tái)采用linux
    2014-03-03

最新評(píng)論