Я хотел бы намеренно создавать условия плохих индексов для имеющейся у меня тестовой базы данных SQL Server 2017, просто чтобы лучше понять эти сценарии обслуживания? Индекс SQL Server и ведение статистики
Существует ли быстрый / автоматический способ поставить под угрозу целостность индекса или увеличить его фрагментацию? Знаете ли вы какой-нибудь полезный ресурс, на который я могу посмотреть, чтобы добиться этого?
sql-server
index
clustered-index
mororo
источник
источник
DBCC SHRINKDATABASE ([yourNONProdDB])
Ответы:
Один быстрый способ, который я могу себе представить, - это создать таблицу с
UNIQUEIDENTIFIER
первичным ключом и вставить множество случайных значений. Это может быть достигнуто с помощью этого скрипта:Это сгенерирует миллион строк.
Зная, что
NEWID()
это не гарантирует какого-либо порядка, SQL Server придется вставлять в случайные места в таблице - это собирается фрагментировать первичный ключ.источник
INSERT dbo.Tests (Id) SELECT NEWID(); GO 1000000;
- это, очевидно, займет больше времени. См. Pastebin.com/SVLtiRnP для примера, который я собрал вместе для другого вопроса. Использование строк переменной длины и их случайное обновление может более эффективно привести к фрагментации?Я хотел сделать несколько «Гадких» индексов, поэтому я сделал следующее. Это работало хорошо
источник
Обычно фрагментация индекса происходит, когда есть
Update
илиInsert
операция происходит на столе.Если вы хотите быстро вызвать проблему (фрагментация индекса), создайте
Index
в своей тестовой таблице меньшеfill factor
и выполните тяжелую операциюUpdate
илиInsert
операцию с этой таблицей. Вы можете работать с этими скриптами ..источник
Вы также можете использовать,
CRYPT_GEN_RANDOM
как я сделал в этом ответе: Схема фильтра в сценарии оптимизации индекса .Вы можете вставить данные в числовой столбец с индексом для его фрагментации следующим образом:
Вы также можете обновить данные или преобразовать в строку вместо числа, если это то, что вам нужно.
источник