Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

varchar (max) ở mọi nơi?

Bằng cách sử dụng VARCHAR(MAX) về cơ bản bạn đang nói với SQL Server "lưu trữ các giá trị trong trường này theo cách bạn thấy tốt nhất", SQL Server sau đó sẽ chọn có lưu trữ các giá trị dưới dạng VARCHAR thông thường hay không hoặc như một LOB (Đối tượng lớn). Nói chung, nếu các giá trị được lưu trữ nhỏ hơn 8.000 byte, SQL Server sẽ coi các giá trị là một VARCHAR thông thường loại.

Nếu các giá trị được lưu trữ quá lớn thì cột được phép tràn ra khỏi trang vào các trang LOB, chính xác như cách chúng làm đối với các loại LOB khác (text , ntextimage ) - nếu điều này xảy ra thì các lần đọc trang bổ sung được yêu cầu để đọc dữ liệu được lưu trữ trong các trang bổ sung (tức là có một hiệu suất penatly), tuy nhiên điều này chỉ xảy ra nếu các giá trị được lưu trữ quá lớn .

Trên thực tế, trong SQL Server 2008 trở lên, dữ liệu có thể tràn sang các trang bổ sung ngay cả với các kiểu dữ liệu có độ dài cố định (ví dụ:VARCHAR(3,000) ), tuy nhiên những trang này được gọi là trang dữ liệu tràn hàng và được xử lý hơi khác một chút.

Phiên bản ngắn: từ góc độ lưu trữ, không có bất lợi khi sử dụng VARCHAR(MAX) qua VARCHAR(N) cho một số N .

(Lưu ý rằng điều này cũng áp dụng cho các loại trường có độ dài thay đổi khác NVARCHARVARBINARY )

FYI - Bạn không thể tạo chỉ mục trên VARCHAR(MAX) cột



  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 Server Parallel Backup Restore -2

  2. Tạo CHẾ ĐỘ XEM từ nhiều bảng, mỗi bảng có số cột khác nhau

  3. Id XQuery và Node

  4. Không thể mở thiết bị sao lưu. Hệ điều hành lỗi 5

  5. Làm cách nào để di chuyển bảng sang nhóm tệp khác trong MS SQL Server?