亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

數據庫中聚簇索引與非聚簇索引的區別[圖文]

2024-08-31 00:57:40
字體:
來源:轉載
供稿:網友

在《數據庫原理》里面,對聚簇索引的解釋是:聚簇索引的順序就是數據的物理存儲順序,而對非聚簇索引的解釋是:索引順序與數據物理排列順序無關。正式因為如此,所以一個表最多只能有一個聚簇索引。

不過這個定義太抽象了。在SQL Server中,索引是通過二叉樹的數據結構來描述的,我們可以這么理解聚簇索引:索引的葉節點就是數據節點。而非聚簇索引的葉節點仍然是索引節點,只不過有一個指針指向對應的數據塊。如下圖:

數據庫中聚簇索引與非聚簇索引的區別[圖文]


非聚簇索引

 

數據庫中聚簇索引與非聚簇索引的區別[圖文]


聚簇索引


聚簇索引與非聚簇索引的本質區別到底是什么?什么時候用聚簇索引,什么時候用非聚簇索引?

這是一個很復雜的問題,很難用三言兩語說清楚。我在這里從SQL Server索引優化查詢的角度簡單談談(如果對這方面感興趣的話,可以讀一讀微軟出版的《Microsoft SQL Server 2000數據庫編程》第3單元的數據結構引論以及第6、13、14單元)。


一、索引塊與數據塊的區別

大家都知道,索引可以提高檢索效率,因為它的二叉樹結構以及占用空間小,所以訪問速度塊。讓我們來算一道數學題:如果表中的一條記錄在磁盤上占用 1000字節的話,我們對其中10字節的一個字段建立索引,那么該記錄對應的索引塊的大小只有10字節。我們知道,SQL Server的最小空間分配單元是“頁(Page)”,一個頁在磁盤上占用8K空間,那么這一個頁可以存儲上述記錄8條,但可以存儲索引800條。現在我 們要從一個有8000條記錄的表中檢索符合某個條件的記錄,如果沒有索引的話,我們可能需要遍歷8000條×1000字節/8K字節=1000個頁面才能 夠找到結果。如果在檢索字段上有上述索引的話,那么我們可以在8000條×10字節/8K字節=10個頁面中就檢索到滿足條件的索引塊,然后根據索引塊上 的指針逐一找到結果數據塊,這樣IO訪問量要少的多。


二、索引優化技術

是不是有索引就一定檢索的快呢?答案是否。有些時候用索引還不如不用索引快。比如說我們要檢索上述表中的所有記錄,如果不用索引,需要訪問8000 條×1000字節/8K字節=1000個頁面,如果使用索引的話,首先檢索索引,訪問8000條×10字節/8K字節=10個頁面得到索引檢索結果,再根 據索引檢索結果去對應數據頁面,由于是檢索所有數據,所以需要再訪問8000條×1000字節/8K字節=1000個頁面將全部數據讀取出來,一共訪問了 1010個頁面,這顯然不如不用索引快。

SQL Server內部有一套完整的數據檢索優化技術,在上述情況下,SQL Server的查詢計劃(Search Plan)會自動使用表掃描的方式檢索數據而不會使用任何索引。那么SQL Server是怎么知道什么時候用索引,什么時候不用索引的呢?SQL Server除了日常維護數據信息外,還維護著數據統計信息,下圖是數據庫屬性頁面的一個截圖:

數據庫中聚簇索引與非聚簇索引的區別[圖文]

從圖中我們可以看到,SQL Server自動維護統計信息,這些統計信息包括數據密度信息以及數據分布信息,這些信息幫助SQL Server決定如何制定查詢計劃以及查詢是是否使用索引以及使用什么樣的索引(這里就不再解釋它們到底如何幫助SQL Server建立查詢計劃的了)。我們還是來做個實驗。建立一張表:tabTest(ID, unqValue,intValue),其中ID是整形自動編號主索引,unqValue是uniqueidentifier類型,在上面建立普通索 引,intValue 是整形,不建立索引。之所以掛上一個沒有索引的intValue字段,就是防止SQL Server使用索引覆蓋查詢優化技術,這樣實驗就起不到作用了。向表中錄入10000條隨機記錄,代碼如下:

然后我們執行兩個查詢并查看執行計劃,如圖:(在查詢分析器的查詢菜單中可以打開查詢計劃,同時圖上第一個查詢的GUID是我從數據庫中找的,大家做實驗的時候可以根據自己數據庫中的值來定):

數據庫中聚簇索引與非聚簇索引的區別[圖文]



從圖中可以看出,在第一個查詢中,SQL Server使用了IX_tabTest_unqValue索引,根據箭頭方向,計算機先在索引范圍內找,找到后,使用Bookmark Lookup將索引節點映射到數據節點上,最后給出SELECT結果。在第二個查詢中,系統直接遍歷表給出結果,不過它使用了聚簇索引,為什么呢?不要忘 了,聚簇索引的頁節點就是數據節點!這樣使用聚簇索引會更快一些(不受數據刪除、更新留下的存儲空洞的影響,直接遍歷數據是要跳過這些空洞的)。

下面,我們在SQL Server中將ID字段的聚簇索引更改為非聚簇索引,然后再執行select * from tabTest,這回我們看到的執行計劃變成了:

數據庫中聚簇索引與非聚簇索引的區別[圖文]

SQL Server沒有使用任何索引,而是直接執行了Table Scan,因為只有這樣,檢索效率才是最高的。


三、聚簇索引與非聚簇索引的本質區別

現在可以討論聚簇索引與非聚簇索引的本質區別了。正如本文最前面的兩個圖所示,聚簇索引的葉節點就是數據節點,而非聚簇索引的頁節點仍然是索引檢點,并保留一個鏈接指向對應數據塊。

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

同樣一張表,如果我們在對應字段上建立聚簇索引主鍵,由于聚簇索引的頁節點就是數據節點,所以索引節點僅有8000個,占用10個頁面,數據仍然占有1000個頁面。

下面我們看看在執行插入操作時,非聚簇索引的主鍵為什么比聚簇索引主鍵要快。主鍵約束要求主鍵不能出現重復,那么SQL Server是怎么知道不出現重復的呢?唯一的方法就是檢索。對于非聚簇索引,只需要檢索20個頁面中的16000個節點就知道是否有重復,因為所有主鍵 鍵值在這16000個索引節點中都包含了。但對于聚簇索引,索引節點僅僅包含了8000個中間節點,至于會不會出現重復必須檢索另外1000個頁數據節點 才知道,那么相當于檢索10+1000=1010個頁面才知道是否有重復。所以聚簇索引主鍵的插入速度要比非聚簇索引主鍵的插入速度慢很多。

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


結語

好了,寫了半天,手都累了。關于聚簇索引與非聚簇索引效率問題的實驗就不做了,感興趣的話可以自己使用查詢分析器對查詢計劃進行分析。SQL Server是一個很復雜的系統,尤其是索引以及查詢優化技術,Oracle就更復雜了。了解索引以及查詢背后的事情不是什么壞事,它可以幫助我們更為深 刻的了解我們的系統。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品丝袜白浆摸在线| 亚洲最大在线视频| 亚洲网站在线看| 久久av在线播放| 亚洲一区国产精品| 亚洲欧美日韩久久久久久| 日韩电影中文字幕av| 久久成人精品一区二区三区| 国产亚洲成av人片在线观看桃| 在线看日韩欧美| 国产一区视频在线| 国产欧美一区二区三区四区| 亚洲成人网久久久| 亚洲第一福利网| 狠狠操狠狠色综合网| 亚洲最大福利视频网| 久久综合久中文字幕青草| 国产精品69久久久久| 国产精品高潮视频| 国产丝袜精品视频| 最近中文字幕mv在线一区二区三区四区| 国产精品国内视频| 欧美疯狂性受xxxxx另类| 成人精品aaaa网站| 国产欧美一区二区三区视频| 国产成人自拍视频在线观看| 亚洲欧美国产视频| 亚洲欧美日韩精品久久亚洲区| 欧美片一区二区三区| 55夜色66夜色国产精品视频| 国产精品扒开腿做爽爽爽视频| 亚洲石原莉奈一区二区在线观看| 亚洲精品乱码久久久久久按摩观| 亚洲精品视频中文字幕| 福利一区福利二区微拍刺激| 一区二区三区 在线观看视| 91九色国产社区在线观看| 日韩在线播放av| 国产精品入口日韩视频大尺度| 国产成人自拍视频在线观看| 日韩一级黄色av| 国产精品久久久久久久久久尿| 亚洲一区二区自拍| 69**夜色精品国产69乱| 中文字幕日韩在线视频| 成人精品在线视频| 尤物yw午夜国产精品视频明星| 日韩最新免费不卡| 亚洲欧美国产精品va在线观看| 91精品国产自产在线老师啪| 国产精品美女久久久久久免费| 国产精品久久av| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品电影观看| 亚洲999一在线观看www| 日韩中文字幕不卡视频| 国产精品一区二区三| 亚洲性av网站| 日韩美女免费视频| 日韩久久精品电影| 亚洲一区亚洲二区| 九九热在线精品视频| 亚洲加勒比久久88色综合| 亚洲欧美日韩中文在线| 亚洲少妇激情视频| 动漫精品一区二区| 一区二区三区视频在线| 日韩成人在线视频| 成人综合网网址| 国产高清在线不卡| 亚洲精品国产suv| 午夜免费在线观看精品视频| 欧美性xxxx在线播放| 久久国产精品久久精品| 久久久免费在线观看| 欧美一级淫片丝袜脚交| 久久久精品日本| 亚洲自拍在线观看| 久久精品91久久久久久再现| 久久艹在线视频| 亚洲网址你懂得| 狠狠操狠狠色综合网| 色琪琪综合男人的天堂aⅴ视频| 97视频在线观看成人| 久久久久久国产免费| 欧美高清视频在线| 国产精品尤物福利片在线观看| 欧美在线观看www| 在线观看91久久久久久| 成人免费高清完整版在线观看| 日本精品视频在线| 日韩一区二区福利| 91av在线免费观看视频| 日韩视频中文字幕| 成人深夜直播免费观看| 久久国产精品免费视频| 国产亚洲欧美视频| 国产精品成熟老女人| 亚洲第一精品电影| 欧美超级免费视 在线| 日韩精品福利网站| 91在线|亚洲| 欧美中文字幕视频| 欧美日韩中文字幕日韩欧美| 国产精品欧美久久久| 最新日韩中文字幕| 国产精品电影一区| 亚洲天堂av网| 欧美放荡办公室videos4k| 亚洲偷熟乱区亚洲香蕉av| 亚洲日韩中文字幕在线播放| 国产精品成人aaaaa网站| 国产精品欧美一区二区| 日韩av免费在线看| 国产精品日韩在线观看| 日本久久久久亚洲中字幕| 成人激情视频免费在线| 亚洲国产天堂久久综合| 日韩黄色在线免费观看| 亚洲成av人片在线观看香蕉| 中日韩美女免费视频网站在线观看| 日韩一二三在线视频播| 亚洲国产精品久久久久秋霞不卡| 亚洲色图日韩av| 欧美一区二区三区免费观看| 欧美日韩成人在线播放| 69久久夜色精品国产69乱青草| 国产小视频国产精品| 亚洲国产精品久久久| 成人福利视频在线观看| 91探花福利精品国产自产在线| 欧美性猛交xxxx乱大交3| 亚洲四色影视在线观看| 久久欧美在线电影| 日本成人激情视频| 91久久精品国产91性色| 亚洲欧美在线一区| 欧美日韩在线看| 久久成年人免费电影| 日韩视频亚洲视频| 久久久久国产一区二区三区| 国产伊人精品在线| 亚洲精品久久久一区二区三区| 成人免费大片黄在线播放| 日韩在线免费视频| 欧美另类极品videosbest最新版本| 丝袜亚洲欧美日韩综合| 国产免费一区二区三区在线观看| 色偷偷偷亚洲综合网另类| 久久精品视频中文字幕| 久久国产加勒比精品无码| 国产精品pans私拍| 亚洲天堂av在线播放| 国产精品一区二区三区在线播放| 欧美精品九九久久| 57pao国产成人免费| 91黑丝在线观看| 久久精品国产91精品亚洲| 国产精品精品久久久| 久久久免费观看| 3344国产精品免费看| 欧美第一黄网免费网站| 成人在线激情视频| 国产精品视频网|