No servidor SQL, se tentarmos alterar um tipo de dados de uma coluna com índice, ele exclui os índices associados a essa coluna e altera o tipo de dados. Eu não estava ciente disso e enfrentei o problema de índice sendo excluído, então eu queria saber se há alguma alteração no banco de dados de eventos (comandos SQL) que causará a exclusão do índice.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Não. Pelo que sei, não é possível alterar uma coluna incluída em um índice (você receberá uma mensagem de erro nesse sentido). Você teria que descartar o índice antes de alterar a coluna e reaplicar o índice novamente. A única exceção a isso que conheço é que você pode alterar uma coluna de
NOT NULL
paraNULL
sem ter que descartar o índice (mas não o contrário).No entanto, se você usar o SSMS para alterar uma tabela, o SSMS pode descartar e recriar o índice para você, mas não deve descartar o índice de qualquer maneira.
Por outro lado, se você tiver uma exibição indexada , modifique a exibição até eliminar quaisquer índices na exibição.
Depende do método que você está usando para alterar a coluna. Vamos começar com uma tabela simples:
Em seguida, use o designer de tabelas do SQL Server Management para alterar a coluna CustomerName para VARCHAR(200) em vez de NVARCHAR. Por padrão, ao tentar salvar as alterações (ou mesmo apenas gerar um script de alteração), você recebe um aviso:
Você pode substituir esse aviso no SSMS clicando em Ferramentas, Opções, Designers, Designers de tabela e banco de dados e desmarque a caixa que diz "Evitar salvar alterações que exijam recriação de tabela".
Isso é perigoso, pois se você alterar uma tabela em produção, pode acabar bloqueando-a enquanto o SQL Server reconstrói a tabela do zero. Eu realmente gosto que a Microsoft deixe essa opção habilitada por padrão.
Depois de desativá-lo e tentar editar novamente, não salve a tabela - em vez disso, clique em Table Designer, Generate Change Scripts. Você recebe um novo aviso sobre a perda de dados porque está diminuindo o tamanho dos tipos de dados, passando de um tipo de dados compatível com Unicode (NVARCHAR) para um tipo de dados não-Unicode (VARCHAR). Se ignorarmos esse erro, podemos ver o script de alteração. Inclui a criação da nova tabela, movendo os dados para ela e, finalmente, a recriação de todos os índices não agrupados:
Se você usar uma ferramenta de designer de banco de dados diferente ou se usar alterações de tipo de dados diferentes, poderá obter resultados diferentes. Por exemplo, se você alterar um campo de VARCHAR(MAX) para INT, perderá os índices de texto completo no campo VARCHAR(MAX) porque não pode indexar um número em texto completo.