2009-02-27 40 views
39

Sử dụng trường varchar có hiệu quả hơn là sức mạnh của hai so với một số khác không? Tôi nghĩ không, bởi vì đối với SQL Server, mặc định là 50.Trường VARCHAR - Là sức mạnh của hai hiệu quả hơn?

Tuy nhiên, tôi đã nghe (nhưng không bao giờ xác nhận) rằng trường định cỡ là sức mạnh của 2 hiệu quả hơn vì chúng tương đương với số byte và máy tính xử lý theo bit & byte.

Vì vậy, một trường được khai báo là varchar(32) hoặc varchar(64) có bất kỳ lợi ích thực sự nào trên varchar(50) không?

Trả lời

38

số

Trong một số ứng dụng khác, có một số lợi thế để sử dụng các cấu trúc với một sức mạnh của hai kích thước, chủ yếu là bởi vì bạn có thể phù hợp với một tốt đẹp (sức mạnh của hai) số những bên power- khác cấu trúc hai chiều. Nhưng điều này không áp dụng cho một DB fieldize.

Chỉ có hai kích cỡ liên quan đến VARCHAR là loại chính xác của vARCHAR (hoặc TEXT/BLOB trong một số phương ngữ SQL): nếu nó nhỏ hơn 256, nó có thể sử dụng một byte đơn để chỉ độ dài. nếu nó nhỏ hơn 65536 (64KB), hai byte là đủ, ba byte làm việc lên đến 16777216 (16MB), bốn byte đi đến 4294967296 (4GB).

Ngoài ra, có thể lập luận rằng VARCHAR(50) chỉ đắt bằng VARCHAR(255) vì cả hai sẽ cần n + 1 byte bộ nhớ.

Tất nhiên đó là trước khi nghĩ đến việc Unicode ...

21

Tôi luôn nghĩ rằng mọi người chọn quyền hạn của hai cho trường varchar vì chúng tôi là chuyên viên máy tính và đó là những gì chúng tôi làm. Ít nhất đó là những gì tôi đã luôn luôn làm.

0

Nó phụ thuộc vào việc triển khai cơ sở dữ liệu cụ thể, nhưng tôi không mong đợi nó. Nó không thực hiện bất kỳ phép tính nào về số lượng ký tự, nói chung, vì vậy nó không ảnh hưởng đến hiệu năng - chỉ không gian.

3

Lợi ích hữu hình duy nhất mà bạn sẽ thấy từ việc sử dụng độ dài tối đa nhất định là không gian lưu trữ cần thiết cho VARCHAR. Độ dài tối đa trên 255 sẽ yêu cầu thêm byte để lưu trữ độ dài của giá trị trong mỗi hàng (và thêm 2 byte cho độ dài 256^2 hoặc cao hơn và cứ tiếp tục).

4

Đối với SQL nói chung? Không. Để thực hiện cụ thể, có thể.

Điều gì hiệu quả hơn không được xác định bởi một đặc điểm kỹ thuật (SQL chỉ là một đặc điểm kỹ thuật), nhưng làm thế nào nó được thực hiện trong một DBMS nhất định.

+0

Một nơi có thể cho điều này xảy ra sẽ theo định dạng trong bộ nhớ cho các hàng ... 2 dài^n nên giảm nhu cầu bù đắp sự liên kết. Thông thường một hiệu ứng nhỏ, tôi nghi ngờ. – dmckee

+1

Sắp xếp bộ nhớ xảy ra theo bội số, không phải trong quyền hạn. Trên kiến ​​trúc căn chỉnh 32 bit, ví dụ, bù trừ byte tốt nhất là 4 × n. – Juliano

Các vấn đề liên quan