自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL聚簇索引與非聚簇索引的本質(zhì)區(qū)別

數(shù)據(jù)庫 SQL Server
下文就SQL聚簇索引與非聚簇索引的本質(zhì)區(qū)別進(jìn)行了分析討論,供您參考,如果您對(duì)此方面有興趣的話,不妨一看。

SQL聚簇索引的順序就是數(shù)據(jù)的物理存儲(chǔ)順序,那么,SQL聚簇索引與非聚簇索引的本質(zhì)區(qū)別,究竟在哪里呢?

現(xiàn)在討論SQL聚簇索引與非聚簇索引的本質(zhì)區(qū)別。正如本文最前面的兩個(gè)圖所示,聚簇索引的葉節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn),而非聚簇索引的頁節(jié)點(diǎn)仍然是索引檢點(diǎn),并保留一個(gè)鏈接指向?qū)?yīng)數(shù)據(jù)塊。

還是通過一道數(shù)學(xué)題來看看它們的區(qū)別吧:假設(shè)有一8000條記錄的表,表中每條記錄在磁盤上占用1000字節(jié),如果在一個(gè)10字節(jié)長的字段上建立非聚簇索引主鍵,需要二叉樹節(jié)點(diǎn)16000個(gè)(這16000個(gè)節(jié)點(diǎn)中有8000個(gè)葉節(jié)點(diǎn),每個(gè)頁節(jié)點(diǎn)都指向一個(gè)數(shù)據(jù)記錄),這樣數(shù)據(jù)將占用8000條×1000字節(jié)/8K字節(jié)=1000個(gè)頁面;索引將占用16000個(gè)節(jié)點(diǎn)×10字節(jié)/8K字節(jié)=20個(gè)頁面,共計(jì)1020個(gè)頁面。

同樣一張表,如果我們?cè)趯?duì)應(yīng)字段上建立SQL聚簇索引主鍵,由于SQL聚簇索引的頁節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn),所以索引節(jié)點(diǎn)僅有8000個(gè),占用10個(gè)頁面,數(shù)據(jù)仍然占有1000個(gè)頁面。

下面我們看看在執(zhí)行插入操作時(shí),非聚簇索引的主鍵為什么比聚簇索引主鍵要快。主鍵約束要求主鍵不能出現(xiàn)重復(fù),那么SQL Server是怎么知道不出現(xiàn)重復(fù)的呢?唯一的方法就是檢索。對(duì)于非聚簇索引,只需要檢索20個(gè)頁面中的16000個(gè)節(jié)點(diǎn)就知道是否有重復(fù),因?yàn)樗兄麈I鍵值在這16000個(gè)索引節(jié)點(diǎn)中都包含了。但對(duì)于聚簇索引,索引節(jié)點(diǎn)僅僅包含了8000個(gè)中間節(jié)點(diǎn),至于會(huì)不會(huì)出現(xiàn)重復(fù)必須檢索另外1000個(gè)頁數(shù)據(jù)節(jié)點(diǎn)才知道,那么相當(dāng)于檢索10+1000=1010個(gè)頁面才知道是否有重復(fù)。所以聚簇索引主鍵的插入速度要比非聚簇索引主鍵的插入速度慢很多。

讓我們?cè)賮砜纯磾?shù)據(jù)檢索的效率,如果對(duì)上述兩表進(jìn)行檢索,在使用索引的情況下(有些時(shí)候SQL Server執(zhí)行計(jì)劃會(huì)選擇不使用索引,不過我們這里姑且假設(shè)一定使用索引),對(duì)于SQL聚簇索引檢索,我們可能會(huì)訪問10個(gè)索引頁面外加1000個(gè)數(shù)據(jù)頁面得到結(jié)果(實(shí)際情況要比這個(gè)好),而對(duì)于非聚簇索引,系統(tǒng)會(huì)從20個(gè)頁面中找到符合條件的節(jié)點(diǎn),再映射到1000個(gè)數(shù)據(jù)頁面上(這也是最糟糕的情況),比較一下,一個(gè)訪問了1010個(gè)頁面而另一個(gè)訪問了1020個(gè)頁面,可見檢索效率差異并不是很大。所以不管非聚簇索引也好還是聚簇索引也好,都適合排序,聚簇索引僅僅比非聚簇索引快一點(diǎn)。

 

 

【編輯推薦】

SQL注入語句五例

SQL SERVER事務(wù)的語法介紹

Sql Server視圖的概念

使用SQL查詢連續(xù)號(hào)碼段的方法

SQL查詢***最小值的示例

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-07-14 15:04:53

SQL Sever索引

2023-06-12 08:38:23

聚簇索引排序非聚簇索引

2025-04-28 07:10:46

聚簇非聚簇索引

2025-05-06 08:55:00

2025-02-28 10:31:50

2024-05-24 09:28:22

2022-06-13 07:36:06

MySQLInnoDB索引

2023-04-17 10:47:49

MySQL聚簇索引

2010-04-21 13:43:31

Oracle聚簇索引

2010-04-12 16:50:47

Oracle索引聚簇表

2010-04-12 17:00:37

Oracle索引聚簇表

2010-05-31 13:57:49

2023-06-05 08:07:34

聚集索引存儲(chǔ)數(shù)據(jù)

2022-03-25 10:38:40

索引MySQL數(shù)據(jù)庫

2010-04-01 17:14:04

Oracle索引

2024-03-25 13:02:00

MySQL索引主鍵

2020-02-14 18:10:40

MySQL索引數(shù)據(jù)庫

2023-05-23 22:19:04

索引MySQL優(yōu)化

2011-05-25 13:10:40

SQL ServerOracle

2023-04-26 07:40:34

MySQL索引類型存儲(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)