ฉันเดาว่านั่นเป็นข้อ จำกัด เนื่องจากการดำเนินการ การอนุญาตให้การตั้งค่านี้ในหลาย ๆ ตารางเป็นสิ่งที่น่าพอใจอย่างมาก:
เนื่องจากนี่คือพารามิเตอร์เซสชันการอนุญาตให้การตั้งค่าสามารถเปิดใช้งานบนตารางเดียวหมายความว่าเป็นแฟล็กที่เรียบง่ายและรหัสวัตถุของตารางที่จะเก็บไว้ในเซสชันฝั่งเซิร์ฟเวอร์ บางทีนี่อาจเป็นเพียงเลขจำนวนเต็มเดียว: 0 ถ้าไม่มี IDENTITY_INSERT ใช้งานอยู่และการเขียนโค้ดของฐานข้อมูล + + objectid บางส่วนสำหรับตาราง
การอนุญาตให้พารามิเตอร์ถูกตั้งค่าบนหลายตารางภายในเซสชันจะหมายความว่าเซิร์ฟเวอร์จะเก็บรายการแบบไดนามิกของวัตถุดังกล่าวและตรวจสอบทุกคำสั่งแทรก ลองนึกภาพเซสชันเปิดใช้งานพารามิเตอร์สำหรับหนึ่งพันตาราง:
- นี่หมายความว่าเซิร์ฟเวอร์ได้จัดสรร 1,000 รายการในตัวแปรเซสชัน
- ซึ่งหมายความว่าเซิร์ฟเวอร์จะต้องตรวจสอบรายการ 1,000 รายการสำหรับทุกคำสั่งแทรกในเซสชั่นนี้
นอกจากนี้ฉันสงสัยว่าเปิดใช้งาน identity_insert มีประสิทธิภาพการทำงานทั่วทั้งเซิร์ฟเวอร์ ใน sybase มี " การเผาไหม้ตัวตนตั้งปัจจัย " ซึ่งได้รับอนุญาตให้บันทึกคุณค่าของตัวตนของเคาน์เตอร์จะถูกบันทึกเพียงครั้งเดียวในขณะที่ (ค่าจะถูกเก็บไว้ในหน่วยความจำและเขียนลงบนดิสก์ครั้งหนึ่งและที่เซิร์ฟเวอร์ ปิดตัวลง ). SQL Server ขึ้นอยู่กับรหัสเดียวกันดังนั้นอาจมีการเพิ่มประสิทธิภาพที่เปรียบเทียบได้บางอย่าง แต่การเปิดใช้งาน identity_insert บนตารางอาจบังคับให้เซิร์ฟเวอร์บันทึกค่าตัวตนสำหรับการแทรกทุกครั้งเนื่องจากไม่สามารถรับประกันขนาดช่องว่างสูงสุดได้ ดังนั้นหากหนึ่งเซสชั่นทำให้ประสิทธิภาพการทำงานที่แทรกบนหนึ่งตารางนี้อาจเป็นที่ยอมรับ แต่ไม่ถ้ามันสามารถทำให้ตีสมบูรณ์ในทุกตาราง auto_increment บนเซิร์ฟเวอร์ ..