Я после некоторого подтверждения этой идеи, чтобы исправить плохо работающую базу данных или лучшее предложение, если кто-то есть. Всегда открыт для лучших предложений.
У меня очень большая база данных (более 20 миллионов записей растет примерно на 1/2 миллиона в день), которые используют GUID в качестве PK.
С моей стороны это недосмотр, но ПК кластеризован на сервере SQL и вызывает проблемы с производительностью.
Причина для guid - эта база данных частично синхронизирована со 150 другими базами данных, поэтому PK должен быть уникальным. SQL Server не управляет синхронизацией, скорее, существует специальный процесс, который синхронизирует данные в соответствии с требованиями системы - все на основе этого GUID.
Каждая из 150 удаленных баз данных не хранит полные данные, хранящиеся в центральной базе данных SQL. они хранят только подмножество данных, которые им действительно необходимы, и данные, которые им требуются, не являются уникальными для них (например, 10 из 150 баз данных могут иметь одни и те же записи из баз данных других сайтов - они совместно используют). Кроме того, данные на самом деле генерируются на удаленных сайтах, а не в центральной точке, поэтому необходимы GUID.
Центральная база данных используется не только для синхронизации всего, но и к этой очень большой фрагментированной базе данных будут выполняться запросы от 3000+ пользователей. Уже это большая проблема при первоначальном тестировании.
К счастью, мы еще не живы - так что я могу вносить изменения и отключать их, если требуется, что является чем-то еще.
Производительность удаленных баз данных не является проблемой - подмножества данных довольно малы, а размер базы данных обычно не превышает 1 ГБ. Записи возвращаются в основную систему довольно регулярно и удаляются из меньших дисков BD, когда они больше не нужны.
Производительность центральной БД, которая хранит все записи, ужасна - из-за кластерного GUID в качестве первичного ключа для такого количества записей. Фрагментация индекса находится вне графика.
Итак, мои мысли по поводу исправления проблемы с производительностью - создать новый столбец BIGINT IDENTITY без знака (1,1), а затем изменить кластеризованный PK столбца BIGINT таблицы.
Я бы создал уникальный некластеризованный индекс в поле GUID, который был первичным ключом.
Меньшим удаленным базам данных 150 не нужно знать о новом ПК в базе данных Central SQL Server - он будет использоваться исключительно для организации данных в базе данных и предотвращения плохой производительности и фрагментации.
Будет ли это работать и улучшить производительность центральной базы данных SQL и предотвратить адскую фрагментацию в будущем (в определенной степени, конечно)? или я пропустил что-то очень важное здесь, которое подпрыгнет и укусит меня и вызовет еще больше горя?
int
за 4255 дней (11,5 лет). Если бы он сделал это, он бы обвинял вас только в 11,5 лет;)