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

Jak osiągnąć limity 8060 bajtów na wiersz i 8000 na wartość (varchar, nvarchar)?

Wewnątrz silnika pamięci masowej:anatomia rekordu

To jest dla SQL Server 2005

  • nagłówek rekordu
    • 4 bajty długości
    • dwa bajty metadanych rekordu (typ rekordu)
    • dwa bajty wskazujące w rekordzie do przodu na bitmapę NULL
  • Część rekordu o stałej długości, zawierająca kolumny przechowujące typy danych o stałej długości (np. bigint, char(10), datetime)
  • Bitmapa NULL
    • dwa bajty na liczbę kolumn w rekordzie
    • zmienna liczba bajtów do przechowywania jednego bitu na kolumnę w rekordzie, niezależnie od tego, czy kolumna dopuszcza wartość null, czy nie (jest to inne i prostsze niż SQL Server 2000, który miał tylko jeden bit na kolumnę dopuszczającą wartość null)
    • pozwala to na optymalizację podczas czytania kolumn, które są NULL
  • tablica przesunięcia kolumny o zmiennej długości
    • dwa bajty na liczbę kolumn o zmiennej długości
    • dwa bajty na kolumnę o zmiennej długości, co daje przesunięcie do końca tagu valueversioning kolumny
  • jest to tylko w SQL Server 2005 i jest 14-bajtową strukturą zawierającą znacznik czasu oraz wskaźnik do magazynu wersji w tempdb

Tak więc za jeden znak (8000)

  • 4 bajty (nagłówek rekordu)
  • 8000 stałej długości
  • 3 bitmapy zerowe
  • 2 bajty do zliczenia zmiennej długości
  • 14 znacznik czasu

Jeśli jednak masz 40 varchar(200) kolumn

  • 4 bajty (nagłówek rekordu)
  • 0 stałej długości
  • 6 pustych bitmap
  • 2 bajty do zliczenia zmiennej długości
  • 202 x 40 =8080
  • 14 znacznik czasu

Razem =8080 + 4 + 6 + 2 + 14 =8106. WTF? Otrzymasz ostrzeżenie podczas tworzenia tej tabeli

Nie za bardzo bym się tym rozłączył:ta informacja nie praktyczna wartość z dnia na dzień



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Badanie opcji oczekiwania na blokadę o niskim priorytecie w programie SQL Server 2014 CTP1

  2. Porady Brenta Ozara i Pinala Dave dotyczące wydajności SQL Server

  3. Kopia zapasowa na poziomie tabeli

  4. Sposoby, aby wiedzieć, jak radzić sobie z uszkodzeniem bazy danych w SQL Server

  5. Indeksy oparte na funkcjach w SQL Server