Salah satu pelanggan kami menggunakan beberapa kolom tipe data DECIMAL(18,0)
dalam database SQL Server 2008R2-nya. Karena kolom tumbuh cukup lambat, dia baru-baru ini mengusulkan untuk mengubah tipe data DECIMAL(5,0)
untuk mendapatkan kembali beberapa penyimpanan.
Menurut perpustakaan MSDN , ruang penyimpanan DECIMAL(5,0)
tipe data adalah, sama seperti DECIMAL(9,0)
tipe data, 5 byte. INT
berukuran 1 byte lebih kecil, tetapi dapat menyimpan semuanya dalam kisaran -2 ^ 31 hingga 2 ^ 31 sebagai ganti -99.999 hingga 99.999 yang DECIMAL(5,0)
dapat disimpan. Bahkan yang terbesar DECIMAL
yang masuk ke dalam 5 byte ( DECIMAL(9,0)
) dapat menyimpan hanya bilangan bulat dalam kisaran -999.999.999 hingga 999.999.999 (yang kurang dari setengah dari kisaran INT
penawaran dalam 4 byte).
Saya dapat memikirkan dua "manfaat" menggunakan DECIMAL
lebih dari INT
:
- Kemampuan untuk menambah skala sesudahnya, tanpa menggunakan lebih banyak ruang penyimpanan
- Kemampuan untuk skala presisi hingga 38 digit, tanpa mengubah tipe data
tapi ini bukan manfaat nyata menurut saya:
- Menambahkan skala ke bilangan bulat hanya masuk akal dalam beberapa kasus (dalam kebanyakan kasus di mana skala membuat perbedaan, itu juga dapat ditambahkan sebelumnya)
- SQL Server melihat setiap kombinasi presisi / skala sebagai tipe data yang berbeda, sehingga tipe data tidak dibiarkan sendirian ketika meningkatkan presisi atau skala.
Ini membuat saya bertanya-tanya: apa manfaat tambahan dari DECIMAL(5,0)
tipe data untuk bilangan bulat?
decimal(x,0)
dan tipe integer menunjukkan dirinya dalam divisi aritmatika. Jika Anda membagi int dengan int, Anda mendapatkan int. Jika Anda membagi desimal (x, 0) dengan int, Anda mendapatkan desimal (x + 6,6).