Criando um índice em uma tabela muito ocupada

11

Temos uma tabela com muitas insert\selectvezes (como 100 máquinas inserindo \ atualizando a cada segundo).

Qual é a melhor maneira de criar um índice em uma tabela que não pode ser bloqueada nem por um segundo?

Se eu criar o índice, tenho certeza de que ele bloqueará as solicitações e não posso fazê-lo.

É uma mesa grande com 1 milhão de linhas +.

Racer SQL
fonte

Respostas:

12

Não existe uma opção como CREATE INDEX WITH (NOLOCK)(e mesmo NOLOCKem uma consulta obtém bloqueios, apenas menos do que sem a dica).

O melhor que você fará é o WITH (ONLINE = ON)que ainda trava bloqueios no início e no final da operação (ambos relacionados à recompilação de planos relacionados à tabela - consulte esta postagem no blog de Paul Randal para obter mais detalhes ).

Isso reduzirá significativamente o impacto da criação do índice em seus aplicativos, mas não há maneira prática de eliminar completamente esse impacto. Além disso, esse recurso não é gratuito: requer o Enterprise Edition.

Aaron Bertrand
fonte