2008-10-17 9 views
6

Một người bạn của tôi tuyên bố rằng trong một cơ sở dữ liệu điển hình, sử dụng (ví dụ) nvarchar[256] sẽ cho hiệu suất tốt hơn một chút so với nvarchar[200] hoặc nvarchar[250] do độ chi tiết của phân bổ trang.Các trường văn bản có độ dài thay đổi cơ sở dữ liệu có phải là quyền hạn của 2 không?

Có sự thật nào về điều này không?

Cảm ơn!

+0

Câu hỏi liên quan: http://stackoverflow.com/questions/214527/is-there-any-performance-reason-to-use-powers-of-two-for-field-sizes-in-my-data – CesarB

Trả lời

16

Điều này không đúng. Bảng được phân bổ trên đĩa trong 8k trang. Khi một bảng được đọc từ đĩa, toàn bộ trang được đọc trong một hoạt động IO và được lưu trữ trong bộ nhớ. Do đó, độ dài của một cột sẽ không ảnh hưởng đến sự liên kết bộ nhớ. Trong thực tế, với các kiểu dữ liệu không thay đổi chiều dài, ngắn hơn chắc chắn là tốt hơn: một cột nchar (200) sẽ cho phép nhiều hàng trên mỗi trang hơn cột nchar (256). Điều này cho phép nhiều hàng hơn được đọc trên một IO vật lý đơn lẻ, có thể có ảnh hưởng ấn tượng về hiệu suất cơ sở dữ liệu.

5

Nếu bất kỳ điều gì có thể tồi tệ hơn do chi phí phân bổ. Khi bạn phân bổ nvarchar (256) cơ sở dữ liệu có thể bao gồm một vài byte cho độ dài, vì vậy yêu cầu lưu trữ thực sự có thể là 258.

Có rất nhiều mức độ trừu tượng khi chơi ở đây bạn sẽ không thấy bất kỳ lợi ích bằng cách cố gắng tối ưu hóa ở đầu cho một cái gì đó mà chỉ có vấn đề ở phía dưới, và bạn chỉ có thể làm cho mọi thứ tồi tệ hơn!

+0

Ít nhất đây là một nỗ lực mới trong việc tối ưu hóa sớm. Tôi chưa bao giờ nghe cái này trước đây. – MusiGenesis

1

Tôi tự hỏi, nếu bạn của bạn bằng cách nào đó đã đi đến kết luận của anh ta/cô ấy hoặc nếu đây là trường hợp tuyên truyền thần thoại.

Có một bài thuyết trình tuyệt vời của Tom Kyte về "Những điều bạn biết" rằng khá nhiều tất cả mọi người nên xem trước khi đưa ra tuyên bố như trên: Things you know

1

Hãy suy nghĩ về nó theo cách này: Nếu nvarchar [256] thực hiện tốt hơn hơn nvarchar [200], liệu DBMS có tạo ra một nvarchar [256] khi bạn yêu cầu một nvarchar [200] không? (Nhưng vẫn làm cho nó trông giống như nvarchar [200])

Tốt DBMS có một số tối ưu hóa cực kỳ tiên tiến. Tôi khá chắc chắn rằng họ có tất cả những người đơn giản quá.