Gostaria de criar intencionalmente condições de índices ruins em um banco de dados de teste do SQL Server 2017 que tenho, apenas para entender melhor esses scripts de manutenção? Manutenção de índice e estatística do SQL Server
Existe uma maneira rápida / automática de comprometer a integridade do índice ou aumentar a fragmentação do índice? Você conhece algum recurso útil que eu possa procurar para conseguir isso?
sql-server
index
clustered-index
mororo
fonte
fonte
DBCC SHRINKDATABASE ([yourNONProdDB])
Respostas:
Uma maneira rápida que eu posso imaginar é criar uma tabela
UNIQUEIDENTIFIER
como chave primária e inserir muitos valores aleatórios. Isso pode ser alcançado usando este script:Isso irá gerar milhões de linhas.
Sabendo que
NEWID()
não garante nenhuma ordem, o SQL Server precisará inserir pontos aleatórios na tabela - isso fragmentará a chave primária.fonte
INSERT dbo.Tests (Id) SELECT NEWID(); GO 1000000;
- isso obviamente levará mais tempo. Veja pastebin.com/SVLtiRnP para um exemplo que eu escolhi para outra pergunta. Usar linhas de comprimento variável e atualizá-las aleatoriamente pode produzir fragmentação com mais eficiência?Eu queria criar vários índices "Feios", então fiz o seguinte. Funcionou bem
fonte
Normalmente, a fragmentação do índice ocorre quando há
Update
ouInsert
ocorre uma operação na tabela.Se você deseja produzir rapidamente o problema (fragmentação do índice), crie um
Index
na sua tabela de teste com menosfill factor
e faça operações pesadasUpdate
ouInsert
nessa tabela. Você pode trabalhar com esses scripts.fonte
Você também pode usar
CRYPT_GEN_RANDOM
como eu fiz nesta resposta: Esquema de filtro no script de otimização de índice .Você pode inserir dados em uma coluna numérica que possui um índice para fragmentá-lo assim:
Você também pode atualizar os dados ou converter em uma sequência em vez de um número, se for o que você precisa.
fonte