Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Versão e desempenho da linha


Existem poucas implicações de desempenho, rowversion é apenas um novo nome para o antigo tipo de dados timestamp. Portanto, seu banco de dados precisará armazenar o campo binário adicional. Seu desempenho sofrerá muito mais quando você tentar fazer consultas nesses dados como:
SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Que é a maneira comum que pode ser usada para obter a lista de itens atualizados desde a última @rowVersion. Isso parece bom e funcionará perfeitamente para uma tabela com, digamos, 10.000 linhas. Mas quando você chegar a 1 milhão de linhas, descobrirá rapidamente que ele sempre fez uma varredura de tabelas e seu desempenho foi atingido porque sua tabela agora não cabe mais inteiramente na RAM do servidor.

Este é o problema comum encontrado com o rowVersion coluna, ela não é indexada magicamente por conta própria. Além disso, quando você indexa uma coluna rowVersion, você precisa aceitar que o índice geralmente ficará muito fragmentado ao longo do tempo, porque os novos valores atualizados sempre estarão na parte inferior do índice, deixando lacunas em todo o índice à medida que você atualiza os itens existentes .

Edit:Se você não vai usar o rowVersion campo para verificar itens atualizados e, em vez disso, você o usará para consistência para garantir que o registro não seja atualizado desde a última leitura, então esse será um uso perfeitamente aceitável e não terá impacto.
UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion