MySQL中的聚集索引、二級(jí)索引使用解讀
以下是關(guān)于聚集索引、二級(jí)索引(非聚集索引)以及回表查詢的重點(diǎn)內(nèi)容:

聚集索引
定義與特點(diǎn):聚集索引是將數(shù)據(jù)存儲(chǔ)與索引放在一塊兒,B樹索引結(jié)構(gòu)的葉子節(jié)點(diǎn)保存了整行數(shù)據(jù),并且有且只能有一個(gè),通常情況下是主鍵。
選舉規(guī)則
- 若表中有主鍵,那么主鍵就是聚集索引。
- 若表沒有主鍵,會(huì)查看是否有唯一索引,若有則將唯一索引當(dāng)作聚集索引。
- 若表既沒有主鍵也沒有唯一索引,InnoDB引擎會(huì)自動(dòng)生成一個(gè)隱藏的聚集索引。

二級(jí)索引(非聚集索引)
- 定義與特點(diǎn):二級(jí)索引將數(shù)據(jù)與索引分開存儲(chǔ),B樹索引結(jié)構(gòu)的葉子節(jié)點(diǎn)關(guān)聯(lián)的是對(duì)應(yīng)的主鍵,一個(gè)表中可以有多個(gè)二級(jí)索引。
- 存儲(chǔ)結(jié)構(gòu)示例:以給表中的name字段添加索引為例,其在B樹中葉子節(jié)點(diǎn)存儲(chǔ)的是對(duì)應(yīng)數(shù)據(jù)的主鍵值,而非整行數(shù)據(jù),這與聚集索引存儲(chǔ)整行數(shù)據(jù)不同。
回表查詢

過程示例:
- 假設(shè)有查詢語(yǔ)句
select * from user where name = 'arm',由于給name字段添加了索引, - 會(huì)先走二級(jí)索引。從根節(jié)點(diǎn)開始比對(duì),
- 找到對(duì)應(yīng)的節(jié)點(diǎn)(如找到arm對(duì)應(yīng)的節(jié)點(diǎn)),但此時(shí)二級(jí)索引只能拿到主鍵值(如10),
- 因?yàn)椴樵冋Z(yǔ)句是“select *”需要整行數(shù)據(jù),所以要拿著主鍵值(10)再到聚集索引中查找。
- 在聚集索引中同樣從根節(jié)點(diǎn)比對(duì),最終定位到整行數(shù)據(jù)。
定義:
- 先通過二級(jí)索引找到對(duì)應(yīng)的主鍵值,然后拿到主鍵再到聚集索引中找到整行數(shù)據(jù)的過程就是回表查詢。
面試回答技巧
- 當(dāng)被問到“什么是聚集索引和非聚集索引”時(shí),回答應(yīng)包含聚集索引是數(shù)據(jù)與索引放一塊,葉子節(jié)點(diǎn)存整行數(shù)據(jù),一般是主鍵且只有一個(gè);二級(jí)索引(非聚集索引)是數(shù)據(jù)與索引分開存,葉子節(jié)點(diǎn)存主鍵值,可以有多個(gè),單獨(dú)給字段創(chuàng)建的索引大多是二級(jí)索引。
- 當(dāng)被問到“什么是回表查詢”時(shí),先介紹聚集索引和二級(jí)索引的概念,再解釋回表查詢是先通過二級(jí)索引找主鍵值,再用主鍵到聚集索引找整行數(shù)據(jù)的過程。實(shí)際面試中,即使面試官直接問回表查詢,也應(yīng)先介紹索引相關(guān)概念再解釋回表查詢。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql數(shù)據(jù)庫(kù)中字符集亂碼問題原因及解決
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)中字符集亂碼問題原因及解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
windows環(huán)境下Mysql中文亂碼問題解決方法
在搭建Mysql環(huán)境的時(shí)候遇到了中文亂碼問題,下面與大家分享下具體的解決方法,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06
Mysql解決數(shù)據(jù)庫(kù)N+1查詢問題
在本篇文章里小編給大家分享了關(guān)于Mysql解決數(shù)據(jù)庫(kù)N+1查詢問題的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-07-07
MYSQL替換時(shí)間(年月日)字段時(shí)分秒不變實(shí)例解析
這篇文章主要介紹了MYSQL替換時(shí)間(年月日)字段,時(shí)分秒不變的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-07-07
MySql版本問題sql_mode=only_full_group_by的完美解決方案
這篇文章主要介紹了MySql版本問題sql_mode=only_full_group_by的完美解決方案,需要的朋友可以參考下2017-07-07
如何優(yōu)雅、安全的關(guān)閉MySQL進(jìn)程
這篇文章主要介紹了如何優(yōu)雅、安全的關(guān)閉MySQL進(jìn)程,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下2020-08-08
MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法
這篇文章主要介紹了MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法,本文直接給出代碼實(shí)例,重要部分已經(jīng)加紅提示,需要的朋友可以參考下2015-05-05
MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問題
這篇文章主要介紹了MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

