У меня есть таблица с первичным ключом в виде кластерного поля GUID; Я генерирую GUID, используя NEWSEQUENTIALID()
вместо NEWID
. К сожалению, поскольку в этой таблице число операций вставки ~ 25k-100k в день, в течение нескольких часов (первичный: кластеризованный) индекс первичного ключа становится фрагментированным на 99%.
Изначально я использовал NEWID
вместо генерации последовательных идентификаторов, но даже когда я заново создал таблицу и заново вставил все строки, используя NEWSEQUENTIALID
(и указал, что это значение по умолчанию для столбца первичного ключа), я все еще вижу фрагментацию порядка 99% в течение нескольких часов. (В настоящее время в таблице около 1,3 миллиона записей.
Я думал о замене GUID целочисленным первичным ключом, но я не уверен, будет ли это работать; Кроме того, поскольку наша команда использует GUID для первичных ключей вместо целых чисел, я не думаю, что у меня будет достаточно бай-ина для этого.
Какие у меня есть варианты сохранить эту вещь дефрагментированной? Я использую SQL Server Express, поэтому у меня нет доступа к агенту SQL (и поэтому я не могу регулярно запускать план обслуживания для перестройки индекса).
Возможно, что я когда-нибудь в будущем разделю эту базу данных / таблицу (из-за объема данных), поэтому мне, вероятно, понадобятся GUID для объединения таблиц.
Также: я не могу использовать индексированное представление, потому что у меня есть внутренняя выборка, которую мне было бы трудно развернуть в объединении.