真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SqlServer中聚集索引的作用是什么-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關(guān)Sql Server中聚集索引的作用是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)建站始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達十多年累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的營銷解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:邊坡防護網(wǎng)等企業(yè),備受客戶贊揚。

一:現(xiàn)象

1:無索引的情況

還是老規(guī)矩,看個例子感受下,首先我有一個Product表,里面沒有任何索引,如下圖:

從上圖中,我悲劇的看到了,物理讀是9次,也就說明走了9次硬盤,你也可以想到,走硬盤的目的是為了拿數(shù)據(jù),邏輯讀有1636次,要注意的是這里的”次“是“頁”的意思,也就是在內(nèi)存中走了1636個數(shù)據(jù)頁,我用dbcc ind 給你看一下,是不是有1636個表數(shù)據(jù)頁。

這里有1637個數(shù)據(jù)頁的原因是第一個是IAM跟蹤頁。

2:有聚集索引的情況

下面我在Product表中建一個product_idx_productid的聚集索引,然后再次看看io情況,如下圖:

當(dāng)你看到這個”邏輯讀“為3次的時候,你是不是已經(jīng)瘋了。。。在多達1636個數(shù)據(jù)頁中找到目標數(shù)據(jù),只需3次。。。。這個在算法盲看來是不是神

仙下凡???當(dāng)然,,,此物天上有,人間也有。。。既然有,就應(yīng)該有一種非常強烈的探索欲。。。。看看這里面到底是怎么玩的。。。。。。

二:探索原理

1:探索葉子節(jié)點

剛才也說了,聚集索引玩的就是B樹,既然是B樹,那就有葉子節(jié)點和分支節(jié)點,專業(yè)術(shù)語就是度為0的為葉子節(jié)點,度>0的叫做分支節(jié)點。。。。

我想你也聽說了,聚集索引是將索引列數(shù)據(jù)進行排序后放入B樹,那為了讓你眼見為實,我先建立一個ID無序的3條記錄。

復(fù)制代碼 代碼如下: dbcc traceon(3604)dbcc page(Ctrip,1,120,1)

然后我用dbcc ind 命令查看下3條記錄在哪個數(shù)據(jù)頁中,如圖:

從圖中可以看到,我的三條記錄是放在148號數(shù)據(jù)頁中的,然后我導(dǎo)出148號數(shù)據(jù)頁,看看內(nèi)容是什么。

復(fù)制代碼 代碼如下: dbcc traceon(3604)dbcc page(Ctrip,1,173,1)

從上圖中,我們看到了”數(shù)據(jù)頁“中的各個槽位的指向是按照表中的實際存儲記錄來的,好了,下面我創(chuàng)建個聚集索引,看看實際數(shù)據(jù)是不是真的有序了?

復(fù)制代碼 代碼如下: create clustered index Ctrip_idx_ID on Person(ID)

不過在這里有個有趣的問題,我的148號”表數(shù)據(jù)頁“哪去了???也是夠奇葩的,換來的確實173號索引頁,那為了保證數(shù)據(jù)完整性,應(yīng)該是把148號數(shù)據(jù)頁的內(nèi)容灌到173索引頁里面去了吧???? 沒關(guān)系,驗證一下。

復(fù)制代碼 代碼如下: dbcc traceon(3604)dbcc page(Ctrip,1,173,1)

通過上面的圖,有沒有直觀的感覺到? 數(shù)據(jù)現(xiàn)在已經(jīng)是aaaaa,bbbbb,ccccc的模式了。。。有序啦。。。。同時索引頁中也保存了148號數(shù)據(jù)

頁的字段值,比如ID,Name信息,拿下面的slot0槽位舉例:

到此為止,我想你對葉子節(jié)點的內(nèi)容有了個大概的認識,起碼沒有讓你死記硬背了~~~

2 :探索分支節(jié)點

為了讓你看到分支節(jié)點,我得多灌一些數(shù)據(jù)進去,好歹要讓數(shù)據(jù)撐破一個索引數(shù)據(jù)頁,這樣分支節(jié)點索引數(shù)據(jù)頁就出來了,看下面的例子:

從圖中可以看到,當(dāng)我插入1000條數(shù)據(jù)的時候,已經(jīng)出現(xiàn)了一個分支節(jié)點(120號索引數(shù)據(jù)頁),三個葉子節(jié)點(173,121,126),葉子

節(jié)點的數(shù)據(jù)頁內(nèi)容我也說過了,現(xiàn)在我很好奇”分支節(jié)點“中保存著什么內(nèi)容???我好興奮,我要導(dǎo)出120號索引數(shù)據(jù)頁了。。。

復(fù)制代碼 代碼如下: dbcc traceon(3604)dbcc page(Ctrip,1,120,1)

簡單分析下slot0:06000000 00ad0000 000100 的內(nèi)容

00000000:葉子索引頁中的最小key值(這里有點特殊,除一行記錄不是保存最小值以外,其余都是的),轉(zhuǎn)換為十進制就是0。

ad000000:葉子索引頁的頁號,轉(zhuǎn)換為十進制就是173。

0100:葉子索引頁的文件號,轉(zhuǎn)換為十進制就是1.

不過通過分析,我們看到了,其實分支節(jié)點中保存著有兩個值,一個childpage的minkey,一個childpage的pageid,同理,其他的槽位也是這樣。

我們換個參數(shù)命令,讓結(jié)果更直觀點,記錄中就是保存著”pageID“和”minKey“。

這樣的話,我腦海中就有一張圖出來了,不知道你現(xiàn)在是否有了????

通過上面的分析,除了第一行記錄不是保存子索引頁中最小key的值外,其他記錄都是提取子索引頁中的最小索引鍵值,這一點要注意。。。

也許對sqlserver團隊來說,只要判斷小于449的話就直接去(1:173)數(shù)據(jù)頁,小于889的直接去(1:121)數(shù)據(jù)頁就可以啦。。。

關(guān)于Sql Server中聚集索引的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


當(dāng)前標題:SqlServer中聚集索引的作用是什么-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://weahome.cn/article/dggjpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部