หนึ่งในลูกค้าของเราใช้คอลัมน์ประเภทข้อมูลDECIMAL(18,0)
ในฐานข้อมูล SQL Server 2008R2 ของเขา เนื่องจากคอลัมน์เติบโตค่อนข้างช้าเขาจึงเสนอให้เปลี่ยนประเภทข้อมูลเป็นDECIMAL(5,0)
พื้นที่เก็บข้อมูลบางส่วน
ตามไลบรารี MSDNพื้นที่เก็บข้อมูลของDECIMAL(5,0)
ประเภทข้อมูลนั้นก็เหมือนกับDECIMAL(9,0)
ประเภทข้อมูล 5 ไบต์ INT
มีขนาดเล็กกว่า 1 ไบต์ แต่สามารถจัดเก็บทุกอย่างในช่วง -2 ^ 31 ถึง 2 ^ 31 แทน -99,999 ถึง 99,999 ซึ่งDECIMAL(5,0)
สามารถจัดเก็บได้ แม้แต่ใหญ่ที่สุดDECIMAL
ซึ่งพอดีกับ 5 ไบต์ ( DECIMAL(9,0)
) สามารถเก็บเฉพาะจำนวนเต็มในช่วง -999,999,999 ถึง 999,999,999 (ซึ่งน้อยกว่าครึ่งหนึ่งของช่วงที่INT
เสนอใน 4 ไบต์)
ฉันนึกถึง "ผลประโยชน์" สองอย่างของการใช้DECIMAL
เกินINT
:
- ความสามารถในการเพิ่มสเกลในภายหลังโดยไม่ต้องใช้พื้นที่เก็บข้อมูลเพิ่มเติม
- ความสามารถในการขยายความแม่นยำสูงถึง 38 หลักโดยไม่ต้องเปลี่ยนประเภทข้อมูล
แต่นี่ไม่ใช่ประโยชน์ที่แท้จริงในความคิดของฉัน:
- การเพิ่มสเกลให้กับจำนวนเต็มนั้นเหมาะสมในบางกรณีเท่านั้น (ในกรณีส่วนใหญ่ที่สเกลนั้นสร้างความแตกต่างก็สามารถเพิ่มได้ล่วงหน้า)
- SQL Server เห็นการรวมกันของความแม่นยำ / มาตราส่วนเป็นชนิดข้อมูลที่แตกต่างกันดังนั้นประเภทข้อมูลไม่ได้ถูกทิ้งไว้ตามลำพังเมื่อเพิ่มความแม่นยำหรือระดับ
สิ่งนี้ทำให้ฉันประหลาดใจ: อะไรคือประโยชน์เพิ่มเติมของDECIMAL(5,0)
ประเภทข้อมูลสำหรับจำนวนเต็ม?
decimal(x,0)
และประเภทจำนวนเต็มอื่นแสดงให้เห็นว่าตัวเองในการแบ่งเลขคณิต ถ้าคุณหาร int ด้วย int คุณจะได้ int ถ้าคุณหารทศนิยม (x, 0) ด้วย int คุณจะได้ทศนิยม (x + 6,6)