Tốc độ tác động của việc sử dụng varchar trong SQL Server 2008


9

Vào thời xưa, việc sử dụng varcharhơn charlà một điều không nên, vì nó varcharđược lưu trữ trên một trang khác với phần còn lại của hàng. Điều này có còn đúng với ngày hôm nay với SQL Server 2008 không? Tôi sẽ thấy bất kỳ mức tăng bộ nhớ / hiệu suất nào từ việc thay đổi 1-3 varchar(5)cột thành char(5)các cột trên một bảng với

a) nói 2.000.000 hàng b) nếu bất kỳ varcharcột nào là một phần của chỉ mục / khóa chính


2
Có thể trùng lặp câu hỏi Làm thế nào để các trường quá dài (varchar / nvarchar) ảnh hưởng đến hiệu suất và việc sử dụng đĩa? (Máy chủ MSSQL 2008) . Nếu bạn nghĩ rằng nó không phải là một bản sao, thì chắc chắn bạn cũng sẽ tìm thấy một số câu trả lời ở đó.
Mary

Câu trả lời:


8

Bạn đang nhầm lẫn văn bản / varchar (max) (loại LOB) với varchar (n) / char (n)

Mặt khác, nếu bạn sử dụng char (1000) chứ không phải varchar (1000) và độ dài dữ liệu trung bình là, thì 42 đây là thiết kế tồi và rất nhiều không gian lãng phí.


trong DB2 và một số công cụ DB khác, char và varchar được lưu trữ khác nhau và một số lời khuyên dành cho DB2 được chuyển qua SQL Server.
Andrew Bickerton

@Andrew Bickerton: còn một huyền thoại nữa ...
gbn

bạn có thể chỉ cho tôi hướng mà huyền thoại đã được gỡ rối không? (Tôi đồng ý rằng lời khuyên không áp dụng cho SQL Server)
Andrew Bickerton

Tôi cũng đang đề cập đến một trong những phiên bản gốc của DB2 (có lẽ đã không còn như vậy trong 10 năm qua), tương tự như lời khuyên với SQL 2000 rằng các PK không nên được phân cụm vì các vấn đề về hiệu năng vẫn còn tồn tại - mặc dù không còn đúng nữa
Andrew Bickerton

@Andrew Bickerton: chỉ cần nhìn vào cấu trúc đĩa của SQL Server (một số câu trả lời SO từ tôi) stackoverflow.com/search?q=user%3A27535+anatomy . Xin lỗi vì đã trả lời trễ
gbn

3

Thật khó để nói cho bạn về mức tăng hiệu suất hoặc lượt truy cập cụ thể mà không biết thêm về lược đồ của bạn, nhưng nói chung bạn muốn xác định dataype để khớp với dữ liệu của bạn. Nếu bạn có nhu cầu về chiều rộng cố định (ví dụ: bạn biết bạn sẽ luôn có năm ký tự) thì bạn nên sử dụng char (5). Nếu bạn có một lượng dữ liệu khác nhau thì bạn nên sử dụng varchar (5).

Đối với SQL, càng nhiều dữ liệu bạn có thể phù hợp trên một trang, hiệu suất của bạn càng tốt.


3

Theo như tôi biết thì SQL Server chưa bao giờ lưu trữ các kiểu dữ liệu varchar hoặc nvarchar ngoài hàng. Văn bản và NText là khác nhau. Có thêm một vài bit được lưu trữ cho một cột có chiều rộng thay đổi nhưng đó là về nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.