日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

難檢字筆畫索引是什么意思 索引是什么意思( 二 )


更新索引字段、插入一條數(shù)據(jù)、刪除一條數(shù)據(jù)都會造成索引的維護從而造成性能的一定影響 。在不同情況下,性能影響是不同的 。比如當(dāng)你有一個聚集索引,插入的數(shù)據(jù)又都是在末尾,這樣幾乎是不會造成數(shù)據(jù)移動,影響較??;如果插入的數(shù)據(jù)在中間位置,一般會導(dǎo)致數(shù)據(jù)移動,而且可能產(chǎn)生分頁和頁碎片,影響就會稍大一點(如果插入到的中間頁有足夠的剩余空間容納插入的數(shù)據(jù),而且位置是在頁末,也是不會造成數(shù)據(jù)移動)
03索引的結(jié)構(gòu)
很多人認為SqlServer的索引是B樹結(jié)構(gòu),那它到底長什么個模樣呢,可以用Sql語句來查看它的邏輯呈現(xiàn) 。
新建查詢執(zhí)行語法: DBCC IND(Test,OrderBo,-1) –其中Test庫的OrderBo表有1萬條數(shù)據(jù),有聚集索引Id主鍵字段 。
執(zhí)行結(jié)果:
如上圖,看到一個IndexLevel=2的索引頁2112(這邊它就是B樹的根節(jié)點,IndexLevel最大的就是根節(jié)點,往下就是子級、子子級…只有一個根頁作為B樹結(jié)構(gòu)的訪問入口點),說明一定還有IndexLevel=1的索引頁和IndexLevel=0的葉子頁 。由于這邊是聚集索引,因此當(dāng)IndexLevel=0的葉子頁就是數(shù)據(jù)頁,存儲的是一筆一筆的物理數(shù)據(jù) 。如上圖也可以看到,IndexLevel=0的行的PageType等于1,就是代表數(shù)據(jù)頁;而如果是非聚集索引,IndexLevel=0的葉子頁,PageType是等于 2,仍然是索引頁 。
同樣,用Sql命令DBCC PAGE看一看
【難檢字筆畫索引是什么意思 索引是什么意思】— DBCC TRACEON(3604,-1)
DBCC PAGE(Test,1,2112,3)
–根節(jié)點2112,可以查出它的兩個子節(jié)點2280和2448,然后對這兩個子節(jié)點再作DBCC PAGE查詢
DBCC PAGE(Test,1,2280,3)
DBCC PAGE(Test,1,2448,3)
如上圖,IndexLevel=2的2112頁有兩個IndexLevel=1的子節(jié)點2280和2448,子節(jié)點下又有子節(jié)點,每個節(jié)點負責(zé)不同的索引鍵值的區(qū)間(即上圖的“Id(key)”欄位,第一行值是Null,表示最小值或倒序時的最大值) 。這樣的層級關(guān)系是不是就是一棵B樹結(jié)構(gòu),其中IndexLevel其實就是B樹結(jié)構(gòu)中的高度Height 。
SqlServer在索引中查找某一筆記錄時,是從根節(jié)點往下找到葉子節(jié)點,因為所有數(shù)據(jù)地址都有存在葉子節(jié)點,這其實是B+樹的特點之一(B樹特點是如果查找的值在非葉子節(jié)點就找到,則就能直接返回,顯然SqlServer不是這么做) 。
既然一定會找到葉子節(jié)點,那么索引包含列只要在葉子節(jié)點記錄就可以了,即非葉子節(jié)點沒有記錄包含列,“索引包含列”見下文第3章節(jié) 。
B+樹這個特點(所有數(shù)據(jù)地址都有存在葉子節(jié)點)也利于between value1 and value2 區(qū)間查詢,只要找到value1和value2(在葉子節(jié)點),然后把中間串起來就是要的結(jié)果了 。
SqlServer索引結(jié)構(gòu)更像是B+樹,最終是B樹和B+樹的混合版,數(shù)據(jù)結(jié)構(gòu)都是人定的,不一定就是純粹的B樹或者單純的B+樹 。
問題來了,Oracle、mysql、sqlserver在索引設(shè)計上有什么區(qū)別呢?哪種方式更優(yōu),大家有什么好的想法可以在下方留言一起探討,后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注一下~
(今完)

推薦閱讀