詳解MySQL 聚簇索引與非聚簇索引
1、聚集索引
表數(shù)據(jù)按照索引的順序來存儲的,也就是說索引項的順序與表中記錄的物理順序一致。對于聚集索引,葉子結(jié)點即存儲了真實的數(shù)據(jù)行,不再有另外單獨的數(shù)據(jù)頁。
在一張表上最多只能創(chuàng)建一個聚集索引,因為真實數(shù)據(jù)的物理順序只能有一種。
從物理文件也可以看出 InnoDB(聚集索引)的數(shù)據(jù)文件只有數(shù)據(jù)結(jié)構(gòu)文件.frm和數(shù)據(jù)文件.idb 其中.idb中存放的是數(shù)據(jù)和索引信息 是存放在一起的。
2、非聚集索引
表數(shù)據(jù)存儲順序與索引順序無關(guān)。對于非聚集索引,葉結(jié)點包含索引字段值及指向數(shù)據(jù)頁數(shù)據(jù)行的邏輯指針,其行數(shù)量與數(shù)據(jù)表行數(shù)據(jù)量一致。
從物理文件中也可以看出 MyISAM(非聚集索引)的索引文件.MYI和數(shù)據(jù)文件.MYD是分開存儲的 是相對獨立的
總結(jié):
聚簇索引和非聚簇索引的區(qū)別是:
聚簇索引(innoDB)的葉子節(jié)點就是數(shù)據(jù)節(jié)點;
而非聚簇索引(myisam)的葉子節(jié)點仍然是索引文件 只是這個索引文件中包含指向?qū)?yīng)數(shù)據(jù)塊的指針
對于 非聚簇索引 來說,每次通過索引檢索到所需行號后,還需要通過葉子上的磁盤地址去磁盤內(nèi)取數(shù)據(jù)(回行)消耗時間。為了優(yōu)化這部分回行取數(shù)據(jù)時間,InnoDB 引擎采用了聚簇索引。
聚簇索引,即將數(shù)據(jù)存入索引葉子頁面上。對于 InnoDB 引擎來說,葉子頁面不再存該行對應(yīng)的地址,而是直接存儲數(shù)據(jù)。
這樣便避免了回行操作所帶來的時間消耗。 使得 InnoDB 在某些查詢上比 MyISAM 還要快!
ps. 關(guān)于查詢時間,一般認為 MyISAM 犧牲了功能換取了性能,查詢更快。但事實并不一定如此。多數(shù)情況下,MyISAM 確實比 InnoDB 查的快 。但是查詢時間受多方面因素影響。InnoDB 查詢變慢得原因是因為支持事務(wù)、回滾等等,使得 InnoDB的葉子頁面實際上還包含有事務(wù)id(換句話說就是版本號) 以及回滾指針。
| 動作描述 | 使用聚集索引 | 使用非聚集索引 |
| 列經(jīng)常被分組排序 | 使用 | 使用 |
| 返回某范圍內(nèi)的數(shù)據(jù) | 使用 | 不使用 |
| 一個或極少不同值 | 不使用 | 不使用 |
| 小數(shù)目的不同值 | 使用 | 不使用 |
| 大數(shù)目的不同值 | 不使用 | 使用 |
| 頻繁更新的列 | 不使用 | 使用 |
| 外鍵列 | 使用 | 使用 |
| 主鍵列 | 使用 | 使用 |
| 頻繁修改索引列 | 不使用 | 使用 |
簡單來說,聚簇索引不適用于頻繁更新的列、頻繁修改的索引列和小數(shù)目的不同值。
以上就是詳解MySQL 聚簇索引與非聚簇索引的詳細內(nèi)容,更多關(guān)于MySQL 聚簇索引與非聚簇索引的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
打開和關(guān)閉mysql服務(wù)的兩種實現(xiàn)方法
這篇文章主要介紹了打開和關(guān)閉mysql服務(wù)的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Navicat連接MySQL出現(xiàn)2059錯誤的解決方案
當(dāng)使用Navicat連接MySQL時,如果出現(xiàn)錯誤代碼2059,表示MySQL服務(wù)器不接受Navicat提供的加密插件,解決方法主要有兩種:一是修改MySQL用戶的認證插件為mysql_native_password,二是升級Navicat到最新版本以支持MySQL8.0及其默認的caching_sha2_password認證插件2024-10-10
MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法
這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
MySQL并發(fā)更新數(shù)據(jù)時的處理方法
在后端開發(fā)中我們不可避免的會遇見MySQL數(shù)據(jù)并發(fā)更新的情況,作為一名后端研發(fā),如何解決這類問題也是必須要知道的,同時這也是面試中經(jīng)常考察的知識點。2019-05-05
Mysql 主從數(shù)據(jù)庫同步(centos篇)
Mysql 主從數(shù)據(jù)庫同步(centos篇),需要的朋友可以參考下。2011-05-05

