2010-12-04 15 views
1

我在SQL Server數據庫中有一個相當獨特的表,它不遵循'典型'使用習慣,並且正在尋找關於聚簇索引的一些建議。SQL Server「一次寫入」表聚簇索引

這是一個虛構的例子,但它非常接近真實的數據。

表中有一個3列主鍵,它們對其他表是真正的外鍵,第四個字段包含相關數據。對於這個例子,讓我們說,表是這樣的:

CREATE TABLE [dbo].[WordCountsForPage](
[AuthorID] [int] NOT NULL, 
[BookID] [int] NOT NULL, 
[PageNumber] [int] NOT NULL, 
[WordCount] [int] NOT NULL 
) 

因此,我們有一個有點層次的主鍵,具有獨特的數據在於第四場。

在實際應用中,總共有28億條可能的記錄,但僅此而已。隨着時間的推移計算數據,實時創建記錄,實際上可能實際上只計算其中1/4記錄。它們存儲在數據庫中,因爲計算是一個昂貴的操作,我們只想爲每個獨特的組合執行一次。如今,數據每分鐘讀取數千次,但是(至少現在)每分鐘還有數百次插入,因爲表填充自己(並且這將持續相當長的一段時間)。我會說每個插入(今天)有10個讀取。

我想知道是否因爲聚簇索引而對所有這些插入進行性能檢測。

由於表將最終變爲只讀,所以聚集索引是有意義的「長期」,但需要一段時間才能達到此目的。

我想我可以在繁重的插入期間將索引設置爲非集羣,並在表填充時將其更改爲集羣,但是如何確定何時會交叉點(以及如何通知我自己在未來的'時機到了')?

我真正需要的是一個可轉換索引,它在未來的某個神奇時間從非聚簇到聚簇。

有關如何處理這個問題的任何建議?

回答

3

事實上,我不會爲先嚐試使用非聚集索引並將其轉換爲聚集索引(這本身就是一件非常麻煩的事情)而煩惱。

的御用索引,金佰利特里普,解釋了她的The Clustered Index Debate Continues..,有一個表上的聚集索引實際上可以提高你插入的性能!

與堆相比,插入是更快在聚簇表(但只在「右」聚簇表中)。這裏的主要問題是IAM/PFS中用於確定堆中插入位置的查找比羣集表(其中插入位置已知,由羣集鍵定義)中的查找慢。插入到定義訂單(CL)的表中並且該訂單不斷增加的表中插入速度更快。

堆是一個沒有定義聚簇索引的表。

考慮到這一點,以及從堆到具有聚集索引的表所需的努力和麻煩 - 我甚至不打擾。只需定義你的指數,並開始使用該表!

+0

謝謝馬克。是的,我在這裏問過之前實際上已經閱讀過這篇文章。問題在於指數並非「不斷增加」。數據進入表格沒有任何順序。 – Flipster 2010-12-04 13:29:37