2011-01-12 23 views
15

Xem xét trạng thái MSDN về lưu trữ SQL Server 2008 R2 có độ chính xác NUMERIC/DECIMAL.Máy chủ SQL chính xác NUMERIC/DECIMAL so với bộ nhớ

chính xác từ 1 đến 9 là 5 byte
chính xác từ 10 đến 19 là 9 byte

Vì vậy, nếu trường hợp doanh nghiệp của tôi một cách logic đòi hỏi một kiểu dữ liệu với 2 chữ số thập phân và một độ chính xác 5 chữ số nó không có hiệu suất thực tế hoặc sự khác biệt về dung lượng nếu tôi xác định nó là NUMERIC (5, 2) hoặc NUMERIC (9, 2).

Một trong những xem xét tôi cố ý bỏ qua là ràng buộc kiểm tra ngụ ý vì tôi rất có thể đặt một ràng buộc kiểm tra thực tế trên cột giới hạn phạm vi cho phép thực tế.

Điều này có tạo sự khác biệt khi nói đến chỉ mục, hiệu suất truy vấn hoặc bất kỳ khía cạnh nào khác của hệ thống không?

+0

NUMERIC không đảm bảo rằng một vị trí thập phân tồn tại trong giá trị được chèn/cập nhật. –

+0

Kiểm tra tràn bằng cách sử dụng tổng(). –

Trả lời

37

Số (5, 2) cho phép số lên đến và bao gồm 999,99. Nếu bạn cố gắng chèn 1000.0 vào đó, bạn sẽ nhận được tràn số học.

Numeric (9,2) cho phép số lên đến và bao gồm 9 999 999,99

Gấu nhớ rằng nếu bạn có kế hoạch để từng tổng giá trị này, cho phép thêm không gian, nếu không bạn sẽ nhận được một tràn hoặc bạn' sẽ cần phải làm một diễn viên rõ ràng.

Chúng chiếm cùng một số byte. Vì chúng có cùng dung lượng lưu trữ, chúng giống nhau trong trang dữ liệu, trong bộ nhớ, trong chỉ mục, trong truyền dẫn mạng, v.v.

Vì lý do này mà tôi thường tìm ra số lượng kích thước tôi cần lưu trữ (nếu sử dụng số), sau đó tăng độ chính xác (và có thể quy mô) để tôi ở ngay dưới điểm mà dung lượng lưu trữ tăng lên. Vì vậy, nếu tôi cần lưu trữ lên đến 99 triệu với 4 chữ số thập phân, đó sẽ là số (12,4). Đối với cùng một lưu trữ, tôi có thể có một số (19,6) và cung cấp cho một số không gian an toàn cho khi người dùng doanh nghiệp thông báo rằng họ thực sự cần phải lưu trữ một vài tỷ trong đó.

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