什么是聚集索引
聚集索引是數(shù)據(jù)庫(kù)表的主鍵索引,以一種特定的順序存儲(chǔ)數(shù)據(jù)的邏輯視圖。在一個(gè)表中,只能有一個(gè)聚集索引。聚集索引的特點(diǎn)在于,它將數(shù)據(jù)存儲(chǔ)與索引綁定在一起,即索引的順序就是數(shù)據(jù)的物理存儲(chǔ)順序。例如,在一個(gè)按主鍵升序排列的表中,主鍵值是聚集索引。
什么是非聚集索引
非聚集索引與聚集索引的存儲(chǔ)方式完全不同,它與表數(shù)據(jù)分開存儲(chǔ),非聚集索引本身按照索引值排序,并包含一個(gè)指針,指向每個(gè)索引值對(duì)應(yīng)的數(shù)據(jù)行。一個(gè)表可以有多個(gè)非聚集索引,它們通常用于提供除主鍵以外的查詢?nèi)肟凇?/p>
什么是覆蓋索引
覆蓋索引是非聚集索引的一種特例,它包含了查詢中的所有字段。查詢過(guò)程中,數(shù)據(jù)庫(kù)引擎可以只使用覆蓋索引來(lái)完成查詢,無(wú)需訪問(wèn)表數(shù)據(jù),因此能大大提高查詢效率。覆蓋索引通常用于經(jīng)常執(zhí)行的查詢,它覆蓋了查詢中的所有字段,從而避免了磁盤I/O操作。
總結(jié)
聚集索引、非聚集索引和覆蓋索引都有各自的優(yōu)點(diǎn)和用途,理解它們的區(qū)別和適用場(chǎng)景對(duì)于優(yōu)化數(shù)據(jù)庫(kù)性能非常重要。聚集索引用于定義數(shù)據(jù)的物理存儲(chǔ)順序,優(yōu)化了讀取速度;非聚集索引提供了額外的數(shù)據(jù)查詢?nèi)肟?,可提高多條件查詢的速度;覆蓋索引則是通過(guò)包含所有查詢字段來(lái)進(jìn)一步優(yōu)化查詢性能。
延伸閱讀
什么是B樹
B-樹是一種多路搜索樹(并不一定是二叉的)
1970年,R.Bayer和E.mccreight提出了一種適用于外查找的樹,它是一種平衡的多叉樹,稱為B樹(或B-樹、B_樹)。
一棵m階B樹(balanced tree of order m)是一棵平衡的m路搜索樹。它或者是空樹,或者是滿足下列性質(zhì)的樹:
1、根結(jié)點(diǎn)至少有兩個(gè)子女;
2、每個(gè)非根節(jié)點(diǎn)所包含的關(guān)鍵字個(gè)數(shù) j 滿足:┌m/2┐ – 1 <= j <= m – 1;
3、除根結(jié)點(diǎn)以外的所有結(jié)點(diǎn)(不包括葉子結(jié)點(diǎn))的度數(shù)正好是關(guān)鍵字總數(shù)加1,故內(nèi)部子樹個(gè)數(shù) k 滿足:┌m/2┐ <= k <= m ;
4、所有的葉子結(jié)點(diǎn)都位于同一層。
特點(diǎn):
是一種多路搜索樹(并不是二叉的):
1.定義任意非葉子結(jié)點(diǎn)非常多只有M個(gè)兒子;且M>2;
2.根結(jié)點(diǎn)的兒子數(shù)為[2, M];
3.除根結(jié)點(diǎn)以外的非葉子結(jié)點(diǎn)的兒子數(shù)為[M/2, M];
4.每個(gè)結(jié)點(diǎn)存放至少M(fèi)/2-1(取上整)和至多M-1個(gè)關(guān)鍵字;(至少2個(gè)關(guān)鍵字)
5.非葉子結(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)=指向兒子的指針個(gè)數(shù)-1;
6.非葉子結(jié)點(diǎn)的關(guān)鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7.非葉子結(jié)點(diǎn)的指針:P[1], P[2], …, P[M];其中P[1]指向關(guān)鍵字小于K[1]的
子樹,P[M]指向關(guān)鍵字大于K[M-1]的子樹,其它P[i]指向關(guān)鍵字屬于(K[i-1], K[i])的子樹;
8.所有葉子結(jié)點(diǎn)位于同一層;