sql >> Database >  >> RDS >> Sqlserver

Rijversie en prestaties

Er zijn weinig gevolgen voor de prestaties, rijversie is slechts een nieuwe naam voor het oude tijdstempelgegevenstype. Uw database moet dus het extra binaire veld opslaan. Uw prestaties zullen veel meer lijden wanneer u query's op deze gegevens probeert uit te voeren, zoals:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Dat is de gebruikelijke manier om de lijst met bijgewerkte items sinds de laatste @rowVersion te krijgen. Dit ziet er goed uit en werkt perfect voor een tabel met bijvoorbeeld 10.000 rijen. Maar als je bij 1 miljoen rijen komt, zul je snel ontdekken dat het altijd al een tafelscan heeft gedaan en dat je prestatiehit is omdat je tafel nu niet meer volledig in het RAM-geheugen van de server past.

Dit is het veelvoorkomende probleem dat zich voordoet met de rowVersion kolom, het is niet op zichzelf magisch geïndexeerd. Wanneer u een rowVersion-kolom indexeert, moet u er ook rekening mee houden dat de index in de loop van de tijd vaak erg gefragmenteerd raakt, omdat de nieuwe bijgewerkte waarden altijd onderaan de index zullen staan, waardoor er gaten in de index blijven terwijl u bestaande items bijwerkt .

Bewerken:als je niet gaat, gebruik dan de rowVersion veld voor het controleren op bijgewerkte items en in plaats daarvan gaat u het gebruiken voor consistentie om ervoor te zorgen dat de record niet is bijgewerkt sinds u voor het laatst hebt gelezen, dan is dit een volkomen acceptabel gebruik en heeft dit geen invloed.

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



  1. Custom ORDER BY om 'de' te negeren

  2. Wat zijn de kosten van het indexeren van meerdere db-kolommen?

  3. UPDATE met ORDER BY en LIMIT werken niet in MYSQL

  4. Selecteer laatste rij in MySQL