我正在尝试查看对特定类型的数据使用自定义索引是否可以减少数据库中的碎片。
[编辑:我们使用的是 MS SQL Server 2008 R2]
我有一个包含时间戳测量数据的 SQL 数据库。一直在插入大量数据,但一旦插入,实际上就不需要更新。然而,这些时间戳并不是唯一的,因为有多个设备(其中大约 50 个)同时测量数据。
这意味着表中每 50 行包含相等的时间戳值。这些数据或多或少是同时接收的,尽管我可以额外注意确保尽可能按顺序写入行(如果有帮助的话),也许可以将它们保存在内存中一段时间,然后仅在我获取数据时写入来自所有设备的单个时间戳。
我们将 NHibernate 与 Guid.Comb 一起使用,以避免使用普通的 bigint ID 进行索引查找。与普通 GUID 相比,这应该会减少碎片,但是对于如此多的插入,碎片仍然很快就会发生。
由于我的数据带有时间戳,并且数据几乎按顺序插入(增加时间戳),我想知道是否有更聪明的方法可以为该表创建具有唯一聚集索引的主键。时间戳列基本上是一个 bigint 数字(.NET DateTime 刻度)。
我还注意到,同一时间戳列上的非聚集索引也会变得非常碎片化。那么在这种情况下,您会推荐什么索引策略来减少堆碎片?