Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Versione riga e prestazioni

Ci sono poche implicazioni sulle prestazioni, rowversion è solo un nuovo nome per il vecchio tipo di dati timestamp. Quindi il tuo database dovrà memorizzare il campo binario aggiuntivo. Le tue prestazioni soffriranno molto di più quando proverai a fare query su questi dati come:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Qual è il modo comune che può essere utilizzato per ottenere l'elenco degli elementi aggiornati dall'ultima @rowVersion. Questo sembra a posto e funzionerà perfettamente per una tabella con diciamo 10.000 righe. Ma quando arrivi a 1 milione di righe scoprirai rapidamente che ha sempre eseguito un tablecan e il tuo miglioramento delle prestazioni è dovuto al fatto che la tua tabella ora non si adatta più interamente alla RAM del server.

Questo è il problema comune che si incontra con rowVersion colonna, non è magicamente indicizzato da solo. Inoltre, quando indicizzi una colonna rowVersion, devi accettare che l'indice sarà spesso molto frammentato nel tempo, perché i nuovi valori aggiornati saranno sempre nella parte inferiore dell'indice, lasciando spazi vuoti nell'indice mentre aggiorni gli elementi esistenti .

Modifica:se non hai intenzione di utilizzare rowVersion campo per controllare gli elementi aggiornati e invece lo utilizzerai per coerenza per assicurarti che il record non sia aggiornato dall'ultima lettura, quindi questo sarà un uso perfettamente accettabile e non avrà alcun impatto.

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