sql >> Base de Datos >  >> RDS >> Sqlserver

FilaVersión y rendimiento

Hay pocas implicaciones de rendimiento, rowversion es solo un nuevo nombre para el antiguo tipo de datos de marca de tiempo. Por lo tanto, su base de datos deberá almacenar el campo binario adicional. Tu rendimiento sufrirá mucho más cuando intentes hacer consultas sobre estos datos como:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Que es la forma común que se puede usar para obtener la lista de elementos actualizados desde la última @rowVersion. Esto se ve bien y funcionará perfectamente para una tabla con, digamos, 10,000 filas. Pero cuando llegue a 1 millón de filas, descubrirá rápidamente que siempre ha estado haciendo un escaneo de tablas y su rendimiento se debe a que su tabla ahora ya no cabe completamente dentro de la RAM del servidor.

Este es el problema común que se encuentra con rowVersion columna, no se indexa mágicamente por sí solo. Además, cuando indexa una columna de rowVersion, debe aceptar que el índice a menudo se fragmentará mucho con el tiempo, porque los nuevos valores actualizados siempre estarán en la parte inferior del índice, dejando espacios en blanco a lo largo del índice a medida que actualice los elementos existentes. .

Editar:si no vas a usar rowVersion campo para verificar elementos actualizados y, en su lugar, lo usará por coherencia para asegurarse de que el registro no se actualice desde la última vez que leyó, entonces este será un uso perfectamente aceptable y no tendrá impacto.

UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion