2011-10-03 17 views
9

Me preguntaba si hubo implicaciones en el rendimiento al agregar una columna rowversion en una tabla en una base de datos Sql-Server?RowVersion y Performance

+3

comparado con qué? si necesita una versión de fila, necesita una versión de fila ... –

+2

Estoy de acuerdo con Mitch. ¿Qué solución usaría para reemplazarla, si la necesita? – gbn

+0

posible duplicado de [¿La versión de la fila/la marca de tiempo afecta el rendimiento significativamente?] (Http://stackoverflow.com/questions/7217062/does-rowversion-timestamp-affects-performance-significantly) –

Respuesta

14

Hay pocas implicaciones de rendimiento, rowversion es solo un nuevo nombre para el tipo de datos timestamp anterior. Por lo tanto, su base de datos deberá almacenar el campo binario adicional. Su rendimiento se resentirá mucho más cuando se trata de hacer consultas sobre estos datos como:

SELECT * 
FROM MyTable 
WHERE rowVersion > @rowVersion 

Cuál es la forma común que puede ser utilizado para obtener la lista de los elementos actualizados desde la última @rowVersion. Esto se ve bien y funcionará perfecto para una tabla con digamos 10,000 filas. Pero cuando llegue a las filas de 1M, descubrirá rápidamente que siempre ha estado haciendo un tablescan y su impacto en el rendimiento se debe a que su tabla ahora ya no cabe por completo dentro de la memoria RAM del servidor.

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

Editar: Si no va a utilizar el campo rowVersion para buscar elementos actualizados y en su lugar lo va a utilizar para garantizar que el registro no se actualice desde la última vez que lo leyó, entonces esto va a suceder ser un uso perfectamente aceptable y no tendrá impacto.

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