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

首頁 > 開發 > 綜合 > 正文

索引深入淺出(6/10):選擇正確并合適的聚集索引鍵

2024-07-21 02:47:06
字體:
來源:轉載
供稿:網友
索引深入淺出(6/10):選擇正確并合適的聚集索引鍵

今天我們來探討下聚集索引的設計要求。在選擇聚集索引鍵時,有好幾點需要考慮的。選擇聚集索引鍵沒有硬性規定。多實踐,多從網上找問題的答案都會幫你找到正確的索引鍵。

唯一性(Uniqueness)

SQL Server允許你在非唯一列創建聚集索引,但是唯一性是任何索引最理想的屬性,尤其對于聚集索引。即使SQL Server允許在非唯一列創建聚集索引,在內部,SQL Server會為所有聚集索引鍵的重復值增加4 bytes的值,這個4 bytes 變長列就是所謂的uniquifiers。在這個情況下,SQL Server在聚集索引上定義的非唯一列和內部生成的uniquifiers列的組合當作聚集鍵。這個值在每個聚集索引鍵都會保存。例如在聚集表上定義的非聚集索引的葉子層。

我們來看一個例子,創建SalesOrderDetail表的副本,并在PRoductid列(包含重復值)上定義一個聚集索引。

1 Use IndexDB2 GO3 SELECT * INTO dbo.SalesOrderDetailDupCI FROM AdventureWorks2008r2.Sales.SalesOrderDetail4 GO5 CREATE CLUSTERED INDEX ix_SalesOrderDetailDupCI ON dbo.SalesOrderDetailDupCI(ProductId)

我們通過DBCC INC命令看看它的分配頁,并找出它的根頁:

1 DBCC IND('IndexDB','SalesOrderDetailDupCI',1)2 3 TRUNCATE TABLE dbo.sp_table_pages4 INSERT INTO sp_table_pages EXEC('DBCC IND(IndexDB,SalesOrderDetailDupCI,1)')5 GO6 7 SELECT * FROM dbo.sp_table_pages ORDER BY IndexLevel DESC --根節點/索引頁

可以看到5650頁是根頁(indexlevel列值為最大值2),我們用DBCC PAGE命令看下根頁的內容。

1 DBCC TRACEON(3604)2 DBCC PAGE(IndexDB,1,5650,3)

再用DBCC PAGE看看中間頁5648的內容:

1 DBCC TRACEON(3604)2 DBCC PAGE(IndexDB,1,5648,3)

可以看到,我們的中間級的索引頁額外增加了UNIQUIFIER列,用來保證聚集索引鍵productid的唯一性。當聚集索引創建在非唯一列時,SQL Server會為重復出現的聚集鍵增加4 bytes的隨機值,不重復的鍵不增加(第一條記錄productid為NULL,是唯一不重復的,故UNIQUIFIER值也是NULL)。因此定義在非唯一列的聚集索引會額外生成UNIQUIFIER值,也就增加了聚集鍵的長度。productid列為int,長度為4 bytes,加上4 bytes的UNIQUIFIER,我們聚集鍵的長度也就變成了8 bytes。這個組合會復制到所有非聚集索引的葉子節點。當在非唯一列的聚集索引上創建非聚集索引時,這個問題會加劇,聚集索引值同樣要保存到非葉子層的頁里去。(下篇文章我們會討論在非唯一列的聚集索引上創建非聚集索引的問題)。

如果一個表沒有一個唯一鍵去定義聚集索引,可以考慮再加幾個小列讓它變成唯一。這樣會避免UNIQUIFIER的出現,減少書簽查找操作,因為非聚集索引的非頁層有更多的列(這額外增加的列是為了保持聚集鍵的唯一性)。

靜態的(Static)

另外一個聚集索引鍵的屬性是靜態的。當我們在非靜態列定義聚集索引時,會讓UPDATE語句更加耗費資源,為了保證記錄是按聚集索引的邏輯順序保存的,它需要把記錄移到不同的頁,同樣非聚集索引的葉子層也要更新。

即使在小表的非靜態列上定義聚集索引,且又定義一個非聚集索引在它上面。任何在在聚集索引鍵上個更改都要改動2個頁。一個數據頁,還有一個非聚集索引的葉子層頁。

聚集索引鍵大小(Size of the clustered index key)

聚集索引鍵的大小指的是保存聚集索引鍵需要的字節數。當聚集索引鍵大小增加是,需要更多的IO操作來獲取數據。這個發生是因為如果聚集索引更寬的話,索引頁就只能保存更少的索引行。這就增加了中間層的頁樹,還有索引的深度(B樹結構的層數)。例如,把聚集索引定義在整形列的話,一個包含數百萬記錄的表可能只需要3層的B樹結構。如果把聚集索引定義在更寬的列(包含uniqueidentifier列需要16 bytes),那么索引的深度會增加到4(索引的層數)。任何聚集索引查找需要4個IO操作,原先只要3個IO。

這個問題也會傳遞到非聚集索引,因為聚集索引鍵也保存在所有非聚集索引的葉子層,作為指針指向聚集索引。如果非聚集索引定義在非唯一列,聚集鍵需要保存在非聚集索引的非頁層頁。同樣也會帶來更多的中間層頁,并增加非聚集索引的深度。這也就增加非聚集索引查找/掃描的IO操作。因為聚集索引的深度增加到4,每個書簽查找操作也會需要4個IO操作。

連續性(Sequential)

把聚集索引定義在自增長列(連續的)是個最佳做法。因為這個原因我們經??吹骄奂饕x在標識列(identity column)。聚集索引定義在非連續列會帶來碎片。一個非連續的聚集索引列會強制SQL Server把記錄插在中間(in between)用來保持數據的邏輯順序。這會導致頁分裂,也是造成外部和內部碎片的原因。

總結

我們已經討論聚集索引設計的屬性要求,還有它們背后的原因。在我們決定聚集索引鍵時,上述討論的幾點通常是最佳做法。除此之外,數據訪問模式(data access pattern)也會影響我們聚集索引鍵的選擇。

在我們沒有完全理解數據訪問模式前,我們需要用不同的方法測試下性能先。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲中文字幕国产精品| 国产精品久久久久久久久久久新郎| 91久久精品国产91性色| 精品久久久视频| 久久在线精品视频| 欧美日韩成人在线观看| 国产欧美日韩中文字幕在线| 国产精品久久久久影院日本| 欧美午夜激情小视频| 国模吧一区二区| 精品国产老师黑色丝袜高跟鞋| 亚洲japanese制服美女| 亚洲欧美在线第一页| 欧美激情视频网址| 欧美激情视频一区二区| 精品久久久久久中文字幕一区奶水| 日韩一区二区三区在线播放| 久久久欧美一区二区| 欧美另类在线播放| 国产精品激情av电影在线观看| 亚洲性生活视频在线观看| 午夜精品在线观看| 在线观看日韩专区| 欧美成人全部免费| 国产日韩欧美日韩大片| 久久精品成人欧美大片古装| 久久久久久久久久久人体| 久久久之久亚州精品露出| 欧美亚洲激情在线| 最新亚洲国产精品| 日韩精品在线视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美午夜视频一区二区| 亚洲天堂久久av| 欧美亚洲在线视频| 日本久久久久久| 亚洲精品720p| 国产精品久久久久久久久久新婚| 97色在线观看免费视频| 欧美高清视频在线观看| 91精品视频一区| 伦伦影院午夜日韩欧美限制| 国产精品免费一区二区三区都可以| 在线观看成人黄色| 97福利一区二区| 在线观看欧美日韩| 98午夜经典影视| 欧美日韩一区二区三区| 欧美性高潮床叫视频| 亚洲性av在线| 久久久国产精品一区| 日韩国产高清污视频在线观看| 2018国产精品视频| 久久久天堂国产精品女人| 亚洲人在线视频| 久久电影一区二区| 欧美激情亚洲自拍| 91精品国产乱码久久久久久蜜臀| 亚洲人午夜精品| 亚洲一区二区免费| 日韩有码视频在线| 亚洲第一福利在线观看| 国产在线a不卡| 久久久日本电影| 亚洲人成网站999久久久综合| 欧美日韩国产黄| 国产盗摄xxxx视频xxx69| 久久97久久97精品免视看| 亚洲欧洲在线免费| 亚洲free性xxxx护士hd| 欧美大胆a视频| 国产精品成人播放| 欧美激情欧美狂野欧美精品| 精品国产乱码久久久久久婷婷| 亚洲福利在线观看| 久久久久久国产| 亚洲精品电影网| 国产婷婷色综合av蜜臀av| 成人h视频在线| 最好看的2019年中文视频| 日韩成人在线视频观看| 国内精品一区二区三区| 亚洲偷熟乱区亚洲香蕉av| 亚洲欧洲成视频免费观看| 成人免费高清完整版在线观看| 亚洲欧美日韩视频一区| 国产精品大片wwwwww| 欧美激情视频在线免费观看 欧美视频免费一| 久久精品91久久久久久再现| 日韩欧美亚洲范冰冰与中字| 日韩精品视频免费专区在线播放| 久久91亚洲人成电影网站| 一区二区三欧美| 亚洲视频一区二区| 2019中文字幕在线免费观看| 日韩中文字幕在线视频| 日韩成人久久久| 久久资源免费视频| 国产精品久久久久久久app| 日本韩国欧美精品大片卡二| 久久久久久久久国产精品| 尤物99国产成人精品视频| 国产一区二区黄| 日韩免费不卡av| 亚洲午夜色婷婷在线| 欧美亚洲另类在线| 亚洲精品有码在线| 日韩一级黄色av| 色综合久久久888| 91久久精品视频| 久热在线中文字幕色999舞| 亚洲片av在线| 欧美巨乳在线观看| 欧美久久精品一级黑人c片| 国产亚洲福利一区| 亚洲第一黄色网| 57pao国产精品一区| 国产大片精品免费永久看nba| 欧美国产欧美亚洲国产日韩mv天天看完整| 5566成人精品视频免费| 国产精品一二三视频| 久久久久久久久久久久av| 亚洲新声在线观看| 久久综合五月天| 海角国产乱辈乱精品视频| 日韩欧美在线视频观看| 国产精品一区二区女厕厕| 日本成人免费在线| 日韩av中文字幕在线| 亚洲欧美日韩高清| 欧美亚洲在线视频| 国产精品大陆在线观看| 久久中国妇女中文字幕| 免费不卡欧美自拍视频| 色综合五月天导航| 91精品视频免费| 96国产粉嫩美女| www.美女亚洲精品| 最近2019中文字幕第三页视频| 秋霞av国产精品一区| 久久露脸国产精品| 国产成人一区二区三区小说| 欧美激情久久久久| 亚洲国产精品免费| 亚洲欧美日本另类| 欧美大片在线免费观看| 日韩欧美福利视频| 国产精品麻豆va在线播放| 久久91精品国产91久久久| 国产一区二区在线免费视频| 成人av.网址在线网站| 日韩女优人人人人射在线视频| 中文字幕免费精品一区高清| 91精品久久久久久久久久久久久久| 国产精品黄色影片导航在线观看| 日本国产一区二区三区| 欧美激情女人20p| 日韩欧美a级成人黄色| 大量国产精品视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲成年人影院在线| 一区二区成人av| 亚洲欧美在线x视频| 国产精品99久久久久久人|