鍍金池/ 問答/Java  數(shù)據(jù)庫(kù)/ 數(shù)據(jù)庫(kù)中聚集索引是否存儲(chǔ)了真實(shí)數(shù)據(jù)

數(shù)據(jù)庫(kù)中聚集索引是否存儲(chǔ)了真實(shí)數(shù)據(jù)

索引是一種數(shù)據(jù)結(jié)構(gòu),b+樹的葉子節(jié)點(diǎn)中存放的是指向?qū)嶋H行的指針。
那么聚集索引呢,InnoDB 的聚簇索引在同一個(gè)結(jié)構(gòu)中保存了 B+Tree 索引和數(shù)據(jù)行,這句話是什么意思?
是不是說非聚集索引葉子節(jié)點(diǎn)中的指針指向的就是聚集索引中存放的數(shù)據(jù)行

回答
編輯回答
傲嬌范

InnoDB聚集索引是按照主鍵(primary key)進(jìn)行聚集的,每張表只能有一個(gè)聚集索引,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu),葉子節(jié)點(diǎn)的data域保存了完整的數(shù)據(jù)記錄;所以說,InnoDB表數(shù)據(jù)文件本身就是主索引文件,也就是你剛剛說的“同一個(gè)結(jié)構(gòu)中保存了 B+Tree 索引和數(shù)據(jù)行”。聚集索引的方式會(huì)使根據(jù)主鍵的范圍查找和排序非常快(參考聚集索引的數(shù)據(jù)結(jié)構(gòu))。

InnoDB輔助索引的實(shí)現(xiàn)方式是所有輔助索引都引用主鍵作為data域,因此輔助索引搜索需要檢索兩次索引才能獲得數(shù)據(jù)記錄,但是這樣輔助索引的變更會(huì)很方便(不會(huì)影響根據(jù)主索引組織的數(shù)據(jù)文件本身),同時(shí)因?yàn)樗械妮o助索引都引用主索引,不建議主索引過大。

2017年9月29日 06:01