2010-07-13 123 views
0

我想將SQL插入到表格中,以儘可能避免碎片來優化頁面的使用。 我將運行一個.net Windows服務,每2小時將從數據庫獲取一些數據,並將其優化爲 以供將來查詢。涉及一個varchar(6000)列,但我估計它很少會超過4000字節。 實際上,此列在600到2400之間可以正常變化。 它有助於避免截斷錯誤。我仍然可以通過.net控制列的大小。 不會有更新或刪除。只需選擇(並插入每2小時)。 每2小時將會有大約1000個插頁。在這種情況下如何避免sql server頁面碎片?

我使用Sql Server 2005.頁面大小據說是8096字節。 我需要在表格中插入行。考慮到行的大小,4到12行可以適合頁面。

因此.net我會從數據庫中讀取數據,將其存儲在內存中(可能使用某種聚類算法?),並插入大約1000行。

我想知道是否有辦法避免或最小化這種情況下的頁面碎片。

回答

1

表是btree還是堆?你有一個聚集索引嗎?如果是,那麼聚集索引在哪一列上,在插入時如何計算列值?

爲什麼你關心碎片開始?空間考慮或預讀性能?對於空間,您應該跳過SQL 2005並轉至SQL 2008,獲取Page compression。爲了提前閱讀,值得研究爲什麼你需要大量的預讀。總的來說,索引碎片更多的是大家都在談論的bru-ha-ha,但很少有人真正理解。在碎片化成爲真正的瓶頸之前,還有很多更多的追求。

+0

我使用Btree,int上的聚簇索引以及2個smalldatetimes和int列(備用鍵)上的非聚簇索引,這一個將用於主對等查詢。 我沒有提前閱讀。我關心空間。爲了合法目的,我計劃將歷史信息存儲至少10年,所以我試圖避免因分散而浪費空間。這是一個新的表格,我想正確地做。也許,正如你所說,我不應該在乎它,但我不確定你說的其他途徑是什麼。我希望這個評論能幫助更多。謝謝。 – user347594 2010-07-14 02:05:16

+0

壓縮是要走的路,走SQL 2008,它比任何有關碎片的方法都更有用。例如,使用分區重建每個分區的填充因子100,每月一次。 – 2010-07-14 02:23:28

相關問題