sql >> Databáze >  >> RDS >> Sqlserver

varchar(max) všude?

Pomocí VARCHAR(MAX) v podstatě říkáte SQL Serveru "uložte hodnoty do tohoto pole, jak vidíte nejlépe", SQL Server si poté vybere, zda uložit hodnoty jako běžný VARCHAR nebo jako LOB (velký objekt). Obecně, pokud jsou uložené hodnoty menší než 8 000 bajtů, SQL Server bude s hodnotami zacházet jako s běžným VARCHAR typu.

Pokud jsou uložené hodnoty příliš velké, může sloupec přelévat stránku na stránky LOB, přesně jako u jiných typů LOB (text , ntext a image ) – pokud k tomu dojde, jsou pro přečtení dat uložených na dalších stránkách vyžadována další čtení stránek (tj. dochází k penatizaci výkonu), avšak to se stane pouze v případě, že jsou uložené hodnoty příliš velké .

Ve skutečnosti pod SQL Server 2008 nebo novějším mohou data přetékat na další stránky i s datovými typy s pevnou délkou (např. VARCHAR(3,000) ), tyto stránky se však nazývají datové stránky přetečení řádků a je s nimi zacházeno mírně odlišně.

Krátká verze: z hlediska úložiště není použití VARCHAR(MAX) nevýhodou přes VARCHAR(N) pro některé N .

(Upozorňujeme, že to platí také pro ostatní typy polí s proměnnou délkou NVARCHAR a VARBINARY )

Pro informaci – nemůžete vytvářet indexy na VARCHAR(MAX) sloupce



  1. MySQL vypočítat procento

  2. Perl DBI bez přístupu k databázi

  3. Swiftový kód neaktualizuje databázi MySQL

  4. Jak zjistím celkový počet využitých dní v měsíci?