Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

RowVersion i wydajność

Istnieje kilka implikacji wydajnościowych, rowversion to tylko nowa nazwa starego typu danych znacznika czasu. Twoja baza danych będzie musiała przechowywać dodatkowe pole binarne. Twoja wydajność ucierpi znacznie bardziej, gdy spróbujesz wykonać zapytania na tych danych, takie jak:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Jest to najczęstszy sposób, w jaki można uzyskać listę zaktualizowanych elementów od ostatniego @rowVersion. Wygląda to dobrze i będzie działać idealnie dla tabeli zawierającej powiedzmy 10 000 wierszy. Ale kiedy dojdziesz do 1 miliona wierszy, szybko odkryjesz, że zawsze skanował tabele, a Twój hit wydajności wynika z tego, że Twoja tabela nie mieści się już całkowicie w pamięci RAM serwera.

Jest to częsty problem występujący w rowVersion kolumna, nie jest magicznie indeksowana sama z siebie. Ponadto podczas indeksowania kolumny rowVersion musisz zaakceptować fakt, że indeks często będzie bardzo pofragmentowany w czasie, ponieważ nowe zaktualizowane wartości zawsze będą znajdować się na dole indeksu, pozostawiając luki w indeksie podczas aktualizowania istniejących elementów .

Edycja:jeśli nie zamierzasz użyć rowVersion pole do sprawdzania zaktualizowanych elementów, a zamiast tego użyjesz go dla spójności, aby upewnić się, że rekord nie jest aktualizowany od ostatniego czytania, będzie to całkowicie akceptowalne użycie i nie będzie miało wpływu.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy sposób na przetworzenie i zaimportowanie dużego pliku csv (500k rekordów) do serwera SQL przy użyciu Vbscript?

  2. Typy kursorów programu SQL Server — dynamiczny kursor | Samouczek SQL Server / Samouczek TSQL

  3. Czy to rozwiązanie rekurencyjne można zapisać w zapytaniu T-SQL przy użyciu CTE lub OVER?

  4. SQL Server v.Next:Wydajność STRING_AGG, część 2

  5. Czy możemy napisać oświadczenie o przypadku bez posiadania innego oświadczenia?