Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

varchar(max) навсякъде?

Чрез използване на VARCHAR(MAX) вие всъщност казвате на SQL Server „съхранявайте стойностите в това поле, както виждате най-добре“, след това SQL Server ще избере дали да съхранява стойностите като обикновен VARCHAR или като LOB (Голям обект). По принцип, ако съхранените стойности са по-малки от 8000 байта, SQL Server ще третира стойностите като обикновен VARCHAR вид.

Ако съхранените стойности са твърде големи, тогава колоната може да прехвърли страницата в LOB страници, точно както се прави за други типове LOB (текст , ntext и изображение ) - ако това се случи, тогава са необходими допълнителни четения на страници, за да се прочетат данните, съхранени в допълнителните страници (т.е. има производителност наред), но това се случва само ако съхранените стойности са твърде големи .

Всъщност при SQL Server 2008 или по-нова версия данните могат да препълват към допълнителни страници дори с типовете данни с фиксирана дължина (напр. VARCHAR(3,000) ), обаче тези страници се наричат ​​страници с данни за препълване на редове и се третират малко по-различно.

Кратка версия: от гледна точка на съхранението няма недостатък в използването на VARCHAR(MAX) над VARCHAR(N) за някои N .

(Имайте предвид, че това се отнася и за другите типове полета с променлива дължина NVARCHAR и VARBINARY )

FYI – Вие не можете да създавате индекси на VARCHAR(MAX) колони



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на дата в sql сървър, CURRENT_TIMESTAMP срещу GetDate()

  2. Проблеми с Fluent NHibernate с SQL Server 2008 DATE Стойности на колона

  3. Проблем с CONVERT в sqlserver с грешка Msg 529

  4. Отстраняване на грешки в дълъг динамичен sql в SQL Server 2008

  5. Попълване на липсващи дати по групи