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

RowVersion og ydeevne

Der er få præstationsimplikationer, rowversion er blot et nyt navn for den gamle tidsstempeldatatype. Så din database skal gemme det ekstra binære felt. Din præstation vil lide meget mere, når du prøver at lave forespørgsler på disse data, såsom:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Hvilket er den almindelige måde, der kan bruges til at få listen over opdaterede elementer siden sidste @rowVersion. Dette ser fint ud og vil fungere perfekt til en tabel med f.eks. 10.000 rækker. Men når du kommer til 1M rækker, vil du hurtigt opdage, at den altid har lavet en tabelscanning, og dit præstationshit skyldes, at din tabel nu ikke længere passer helt ind i serverens RAM.

Dette er det almindelige problem, der opstår med rowVersion kolonne, er den ikke magisk indekseret på egen hånd. Når du indekserer en rowVersion-kolonne, skal du også acceptere, at indekset ofte bliver meget fragmenteret over tid, fordi de nye opdaterede værdier altid vil være nederst i indekset, hvilket efterlader huller i hele indekset, når du opdaterer eksisterende elementer .

Rediger:Hvis du ikke skal bruge rowVersion felt til at tjekke for opdaterede elementer, og i stedet vil du bruge det for at sikre ensartethed for at sikre, at posten ikke er opdateret, siden du sidst læste, så vil dette være en helt acceptabel brug og vil ikke påvirke.

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



  1. Henter oracle XMLType gemt som binær XML fra et resultatsæt i Java

  2. SQL forbinder flere værdier fra kolonne til én celle

  3. skrive tabeller til Postgresql ved hjælp af rPostgreSQL, når databasenavnet kun består af store bogstaver

  4. Få første ugedag fra ugenummer