Existuje několik důsledků pro výkon, rowversion je pouze nový název pro starý datový typ časového razítka. Vaše databáze tedy bude muset uložit další binární pole. Váš výkon utrpí mnohem více, když se pokusíte provést dotazy na tato data, jako například:
SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion
Což je běžný způsob, který lze použít k získání seznamu aktualizovaných položek od poslední @rowVersion. Vypadá to dobře a bude to fungovat perfektně pro tabulku s řekněme 10 000 řádky. Ale když se dostanete na 1 milion řádků, rychle zjistíte, že to vždy provádělo skenování tabulek a váš výkon je dán tím, že se vaše tabulka již zcela nevejde do RAM serveru.
Toto je běžný problém, který se vyskytuje u rowVersion
sám o sobě není magicky indexován. Také když indexujete sloupec rowVersion, musíte se smířit s tím, že index se časem často velmi roztříští, protože nové aktualizované hodnoty budou vždy na konci indexu, takže při aktualizaci stávajících položek zůstanou v indexu mezery. .
Upravit:Pokud se nechystáte, použijte rowVersion
pole pro kontrolu aktualizovaných položek a místo toho jej budete používat pro konzistenci, abyste zajistili, že záznam nebude aktualizován od posledního čtení, pak to bude naprosto přijatelné použití a nebude to mít žádný vliv.
UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion