ขนาดของ dateTime2 (0), dateTime2 (1), dateTime2 (2), dateTime2 (3) ใช้พื้นที่เก็บข้อมูลเท่ากัน (6 ไบต์)
ฉันจะถูกต้องหรือไม่ในการบอกว่าฉันอาจใช้ dateTime2 (3) และได้รับประโยชน์จากความแม่นยำโดยไม่มีค่าใช้จ่ายเพิ่มเติม
ไม่คุณแปลเอกสารผิด หมายเหตุ doc ระบุขนาดหน่วยเก็บข้อมูล 6 ไบต์สำหรับการกำหนดน้อยกว่า 3 (การเน้นที่เหมือง) ดังนั้นความแม่นยำเท่ากับ 3 จะต้องมี 7 ไบต์
หากคุณไม่สนใจมิลลิวินาทีdatetime2(0)
ก็จะเป็นประเภทข้อมูลและความแม่นยำที่เหมาะสม วิธีปฏิบัติที่ดีที่สุดคือการระบุชนิดข้อมูลและความแม่นยำที่เหมาะสมตามข้อมูลที่จัดเก็บเนื่องจากจะให้การจัดเก็บและประสิทธิภาพที่ดีที่สุด ที่ถูกกล่าวว่าฉันจะไม่คาดหวังผลกระทบอย่างมีนัยสำคัญประสิทธิภาพตามความแม่นยำ datetime2 ที่ระบุตราบใดที่ขนาดการจัดเก็บจะเหมือนกัน แต่ฉันไม่ได้ทดสอบเฉพาะว่าตัวเอง
ข้อกำหนดของแอปพลิเคชันจะกำหนดสิ่งที่ต้องเก็บไว้ในฐานข้อมูลเมื่อมีความแม่นยำมากขึ้นในแหล่งข้อมูล ตัวอย่างเช่นสำหรับเวลารายการสั่งซื้อที่มาจากSYSDATETIME()
ผู้ใช้อาจไม่ต้องการความแม่นยำ 100 นาโนวินาที อีกครั้งเลือกประเภทข้อมูลและความแม่นยำสำหรับการพัฒนาใหม่ตามข้อกำหนดและโดยทั่วไปคุณจะได้รับประสิทธิภาพที่ดีที่สุดโดยไม่ต้องคิดเพิ่มเติม:
แม้ว่า datetime2 จะเหมาะสมที่สุดสำหรับการพัฒนาใหม่ตามที่ระบุข้างต้นบางครั้งอาจจำเป็นต้องใช้datetime (ความแม่นยำคงที่ 3 ที่มีความแม่นยำ 1/300 เศษส่วนวินาที) แทนการใช้งานร่วมกับแอปพลิเคชัน datetime ดั้งเดิมดังนั้นจึงหลีกเลี่ยงการแปลงโดยนัย ค่าใช้จ่ายของความแม่นยำที่สองเศษส่วนและการจัดเก็บที่เพิ่มขึ้น
พิจารณาว่าการจัดเก็บความแม่นยำสูงกว่าที่ต้องการอาจมีค่าใช้จ่ายในการพัฒนา หากมีการเก็บส่วนประกอบเวลาที่มีเศษส่วนเป็นวินาทีเมื่อต้องการเพียงความแม่นยำที่สองทั้งหมดการสืบค้นจะยังต้องพิจารณาเศษส่วนวินาทีเพื่อส่งคืนผลลัพธ์ที่ถูกต้อง ตัวอย่างเช่นกับแอพที่ผู้ใช้เลือกช่วงเวลาผ่าน UI ที่อนุญาตให้ใช้เวลาเพียงไม่กี่วินาทีเท่านั้นรหัสแอปจะต้องมีการนับเป็นเศษส่วนของวินาทีในค่าช่วงเวลาสิ้นสุดและปรับค่าที่ผู้ใช้จัดหาตามนั้น (เช่นWHERE OrderEntryTime BETWEEN '2017-01-11T08:00:00.00.00' AND '2017-01-11T08:59:59.99'
หรือWHERE OrderEntryTime >= '2017-01-11T08:00:00.00' AND OrderEntryTime < '2017-01-11T09:00:00.00'
) สิ่งนี้จะเพิ่มความซับซ้อนของรหัส