我想查看是否爲特定類型的數據使用自定義索引可能會減少我的數據庫中的碎片。SQL Db索引推薦
[編輯:我們使用的MS SQL Server 2008 R2]
我有一個包含時間戳的測量數據的SQL數據庫。大量的數據一直插入,但一旦插入,實際上不需要更新。但是,這些時間戳是而不是,因爲幾個設備(其中約50個)同時測量數據。
這意味着表中每50行包含相同的時間戳值。雖然我可以額外注意確保行按順序寫入(如果可能會有所幫助),也許可以通過將它們保存在內存中一段時間,然後只在獲取數據時才寫入從所有設備獲取單個時間戳。
我們使用NHibernate和Guid.Comb來避免索引查找,我們可以使用普通的bigint ID。與普通的GUID相反,這應該減少碎片,但是對於如此多的插入,碎片儘管如此仍然很快發生。
由於我的數據是時間戳,並且數據幾乎是按順序插入的(增加時間戳),所以我想知道是否有更聰明的方法來爲該表創建具有唯一聚簇索引的主鍵。 Timestamp列基本上是一個bigint數(.NET DateTime ticks)。
我也注意到,在同一時間戳列上的非聚集索引也變得非常分散。那麼在這種情況下,您會建議採用哪種索引策略來減少堆碎片?
你如何衡量'碎片'?哪個數據庫? – Unreason 2010-11-17 09:23:05
@Unreason:通過查詢「sys.dm_db_index_physical_stats」。還有一種快速檢查SSMS中碎片的方法:右鍵單擊任何索引,屬性 - >碎片。 – Groo 2010-11-18 10:20:24