Я пытаюсь понять, может ли использование пользовательского индекса для определенного типа данных уменьшить фрагментацию в моей базе данных.
[Редактировать: мы используем MS SQL Server 2008 R2]
У меня есть база данных SQL, содержащая данные измерений с метками времени.Много данных вставляется постоянно, но после вставки их практически никогда не требуется обновлять.Эти временные метки, однако, не уникальны, поскольку несколько устройств (около 50 из них) измеряют данные одновременно.
Это означает, что каждые 50 строк в таблице содержат одинаковую временную меткуценности.Эти данные принимаются более или менее одновременно, хотя я мог бы позаботиться о том, чтобы строки записывались как можно более последовательно (если это поможет), возможно, сохраняя их в памяти в течение некоторого времени, а затем записывая только при получении данных.со всех устройств для одной временной отметки.
Мы используем NHibernate с Guid.Comb, чтобы избежать поиска по индексу, который мы имели бы с простыми идентификаторами bigint.В отличие от простых идентификаторов GUID, это должно уменьшить фрагментацию, но для очень многих вставок фрагментация, тем не менее, происходит очень скоро.
Поскольку мои данные имеют временную метку, а данные вставляются почти последовательно (увеличение временных меток), мне интересноесть более умный способ создания первичного ключа с уникальным кластеризованным индексом для этой таблицы.Столбец метки времени в основном представляет собой число bigint (тики .NET DateTime).
Я также заметил, что некластеризованный индекс для того же столбца метки времени также становится довольно фрагментированным.Так какую стратегию индекса вы бы порекомендовали для уменьшения фрагментации кучи в этом случае?