Szybkość wpływu korzystania z varchar w SQL Server 2008

9

W dawnych czasach używanie varcharover charbyło wielkim „nie”, ponieważ varcharbyło przechowywane na innej stronie niż reszta wiersza. Czy nadal tak jest w przypadku SQL Server 2008? Czy zobaczę jakikolwiek wzrost pamięci / wydajności po zmianie 1-3 varchar(5)kolumn na char(5)kolumny w tabeli z

a) powiedz 2.000.000 wierszy b) jeśli którakolwiek z varcharkolumn jest częścią indeksów / kluczy podstawowych

Carlo V. Dango
źródło
2
Możliwe powtórzenie pytania W jaki sposób zbyt długie pola (varchar / nvarchar) wpływają na wydajność i użycie dysku? (MSSQL Server 2008) . Jeśli uważasz, że to nie jest duplikat, na pewno znajdziesz tam również odpowiedzi.
Marian

Odpowiedzi:

8

Mylisz tekst / varchar (max) (typy LOB) z varchar (n) / char (n)

W przeciwnym razie, jeśli użyjesz char (1000), a nie varchar (1000), a średnia długość danych wynosi, powiedzmy, 42, jest to zły projekt i dużo zmarnowanej przestrzeni.

gbn
źródło
w DB2 i niektórych innych silnikach DB char i varchar były przechowywane inaczej, a część porad dotyczących DB2 została przekazana do SQL Server.
Andrew Bickerton,
@Andrew Bickerton: kolejny mit ...
gbn
czy możesz wskazać mi kierunek, w którym ten mit został obalony? (Zgadzam się, że rada nie dotyczy SQL Server)
Andrew Bickerton
Odnoszę się również do jednej z oryginalnych wersji DB2 (prawdopodobnie nie było tak w ciągu ostatnich 10 lat), podobnie do porady z SQL 2000, że PK powinny być niesklastrowane z powodu problemów z wydajnością - chociaż już nie jest prawdą
Andrew Bickerton
@Andrew Bickerton: wystarczy spojrzeć na struktury dyskowe SQL Servera (kilka odpowiedzi SO ode mnie) stackoverflow.com/search?q=user%3A27535+anatomy . Przepraszam za spóźnioną odpowiedź
gbn
3

Trudno powiedzieć ci o konkretnych wzrostach wydajności lub trafieniach, nie wiedząc więcej o swoim schemacie, ale ogólnie chcesz zdefiniować typ danych, aby pasował do twoich danych. Jeśli potrzebujesz stałej szerokości (np. Wiesz, że zawsze będziesz miał pięć znaków), powinieneś użyć char (5). Jeśli masz zmienną ilość danych, powinieneś użyć varchar (5).

W przypadku SQL im więcej danych zmieścisz na stronie, tym lepsza wydajność.

SQLRockstar
źródło
3

O ile wiem, SQL Server nigdy nie przechowywał typów danych varchar lub nvarchar poza wierszem. Tekst i NText są różne. Istnieje kilka dodatkowych bitów, które są przechowywane dla kolumny o zmiennej szerokości, ale o to chodzi.

mrdenny
źródło