MySQL中的聚集索引、二級索引使用解讀
更新時間:2025年07月05日 09:11:10 作者:言之。
這篇文章主要介紹了MySQL中的聚集索引、二級索引使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
以下是關(guān)于聚集索引、二級索引(非聚集索引)以及回表查詢的重點內(nèi)容:
聚集索引
定義與特點:聚集索引是將數(shù)據(jù)存儲與索引放在一塊兒,B樹索引結(jié)構(gòu)的葉子節(jié)點保存了整行數(shù)據(jù),并且有且只能有一個,通常情況下是主鍵。
選舉規(guī)則
- 若表中有主鍵,那么主鍵就是聚集索引。
- 若表沒有主鍵,會查看是否有唯一索引,若有則將唯一索引當(dāng)作聚集索引。
- 若表既沒有主鍵也沒有唯一索引,InnoDB引擎會自動生成一個隱藏的聚集索引。
二級索引(非聚集索引)
- 定義與特點:二級索引將數(shù)據(jù)與索引分開存儲,B樹索引結(jié)構(gòu)的葉子節(jié)點關(guān)聯(lián)的是對應(yīng)的主鍵,一個表中可以有多個二級索引。
- 存儲結(jié)構(gòu)示例:以給表中的name字段添加索引為例,其在B樹中葉子節(jié)點存儲的是對應(yīng)數(shù)據(jù)的主鍵值,而非整行數(shù)據(jù),這與聚集索引存儲整行數(shù)據(jù)不同。
回表查詢
過程示例:
- 假設(shè)有查詢語句
select * from user where name = 'arm'
,由于給name字段添加了索引, - 會先走二級索引。從根節(jié)點開始比對,
- 找到對應(yīng)的節(jié)點(如找到arm對應(yīng)的節(jié)點),但此時二級索引只能拿到主鍵值(如10),
- 因為查詢語句是“select *”需要整行數(shù)據(jù),所以要拿著主鍵值(10)再到聚集索引中查找。
- 在聚集索引中同樣從根節(jié)點比對,最終定位到整行數(shù)據(jù)。
定義:
- 先通過二級索引找到對應(yīng)的主鍵值,然后拿到主鍵再到聚集索引中找到整行數(shù)據(jù)的過程就是回表查詢。
面試回答技巧
- 當(dāng)被問到“什么是聚集索引和非聚集索引”時,回答應(yīng)包含聚集索引是數(shù)據(jù)與索引放一塊,葉子節(jié)點存整行數(shù)據(jù),一般是主鍵且只有一個;二級索引(非聚集索引)是數(shù)據(jù)與索引分開存,葉子節(jié)點存主鍵值,可以有多個,單獨給字段創(chuàng)建的索引大多是二級索引。
- 當(dāng)被問到“什么是回表查詢”時,先介紹聚集索引和二級索引的概念,再解釋回表查詢是先通過二級索引找主鍵值,再用主鍵到聚集索引找整行數(shù)據(jù)的過程。實際面試中,即使面試官直接問回表查詢,也應(yīng)先介紹索引相關(guān)概念再解釋回表查詢。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql派生表(Derived Table)簡單用法實例解析
這篇文章主要介紹了mysql派生表(Derived Table)簡單用法,結(jié)合實例形式分析了mysql派生表的原理、簡單使用方法及操作注意事項,需要的朋友可以參考下2019-12-12mysql5.x升級到mysql5.7后導(dǎo)入之前數(shù)據(jù)庫date出錯的快速解決方法
這篇文章主要介紹了mysql5.x升級到mysql5.7后導(dǎo)入之前數(shù)據(jù)庫date出錯的快速解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09MySql 5.7.17 winx64的安裝配置詳細(xì)教程
這篇文章主要介紹了MySql 5.7.17 winx64的安裝配置教程,初始化數(shù)據(jù)庫、配置相關(guān)信息的方法在本文中介紹的非常詳細(xì),需要的朋友參考下2017-01-01