Một trong những khách hàng của chúng tôi sử dụng cho một số cột kiểu dữ liệu DECIMAL(18,0)
trong cơ sở dữ liệu SQL Server 2008R2 của anh ấy. Vì các cột phát triển khá chậm, gần đây, ông đã đề xuất thay đổi kiểu dữ liệu DECIMAL(5,0)
để lấy lại một số lưu trữ.
Theo thư viện MSDN , không gian lưu trữ của DECIMAL(5,0)
kiểu dữ liệu, giống như DECIMAL(9,0)
kiểu dữ liệu, 5 byte. INT
là 1 byte nhỏ hơn, nhưng có thể lưu trữ tất cả mọi thứ trong khoảng từ -2 ^ 31 đến 2 ^ 31 thay vì -99.999 đến 99.999 mà DECIMAL(5,0)
có thể lưu trữ. Ngay cả số lớn nhất DECIMAL
phù hợp với 5 byte ( DECIMAL(9,0)
) chỉ có thể lưu trữ các số nguyên trong phạm vi -999.999.999 đến 999.999.999 (ít hơn một nửa phạm vi INT
cung cấp trong 4 byte).
Tôi có thể nghĩ về hai "lợi ích" của việc sử dụng DECIMAL
hơn INT
:
- Khả năng thêm tỷ lệ sau đó, mà không cần sử dụng thêm dung lượng lưu trữ
- Khả năng mở rộng độ chính xác lên tới 38 chữ số mà không làm thay đổi kiểu dữ liệu
Nhưng theo tôi thì đây không phải là lợi ích thực sự:
- Thêm tỷ lệ vào số nguyên chỉ có ý nghĩa trong rất ít trường hợp (trong hầu hết các trường hợp quy mô tạo ra sự khác biệt, nó cũng có thể được thêm vào trước)
- SQL Server xem mọi kết hợp độ chính xác / tỷ lệ là một kiểu dữ liệu khác nhau, vì vậy kiểu dữ liệu không bị bỏ lại một mình khi tăng độ chính xác hoặc tỷ lệ.
Điều này khiến tôi tự hỏi: lợi ích bổ sung của DECIMAL(5,0)
kiểu dữ liệu cho số nguyên là gì?
decimal(x,0)
và một kiểu số nguyên thể hiện chính nó trong phân chia số học. Nếu bạn chia một int cho một int, bạn sẽ nhận được một int. Nếu bạn chia một số thập phân (x, 0) cho một số nguyên, bạn sẽ nhận được một số thập phân (x + 6,6).