สิ่งนี้จะสมเหตุสมผลหรือไม่ที่จะให้แอปพลิเคชั่นบังคับใช้ความถูกต้องของฐานข้อมูลแทนการมีคีย์ต่างประเทศตรวจสอบข้อ จำกัด ฯลฯ
การปรับปรุงประสิทธิภาพเท่าไหร่ที่สามารถคาดหวังว่าจะไม่บังคับใช้ความถูกต้องของฐานข้อมูลผ่านเครื่องมือฐานข้อมูลภายใน
สิ่งนี้จะสมเหตุสมผลหรือไม่ที่จะให้แอปพลิเคชั่นบังคับใช้ความถูกต้องของฐานข้อมูลแทนการมีคีย์ต่างประเทศตรวจสอบข้อ จำกัด ฯลฯ
การปรับปรุงประสิทธิภาพเท่าไหร่ที่สามารถคาดหวังว่าจะไม่บังคับใช้ความถูกต้องของฐานข้อมูลผ่านเครื่องมือฐานข้อมูลภายใน
คำตอบ:
ความจริงจะบอกไม่เพียง แต่คุณจะไม่เห็นการสูญเสียประสิทธิภาพมากจากการมีข้อ จำกัด ที่สำคัญต่างประเทศในฐานข้อมูล แต่คุณจะเห็นการปรับปรุงประสิทธิภาพ เครื่องมือเพิ่มประสิทธิภาพการสืบค้น SQL Server สร้างขึ้นตามแนวคิดของคีย์หลักและคีย์อื่น ๆ รวมถึงข้อ จำกัด ของข้อมูลประเภทอื่น หากสิ่งเหล่านี้อยู่ในสถานที่และมีการบังคับใช้เครื่องมือเพิ่มประสิทธิภาพสามารถใช้ประโยชน์จากสิ่งเหล่านี้เพื่อให้ได้ประสิทธิภาพที่ดีขึ้น นี่คือการโพสต์บล็อกด้วยตัวอย่างง่ายๆที่แสดงให้เห็นว่ามีการใช้งานจริง
หากคุณอยู่ในกรณีขอบที่คุณมีส่วนแทรกมากกว่าการอ่านอย่างแท้จริง (และการปรับปรุง & การลบจำเป็นต้องมีการอ่านดังนั้นโดยปกติแล้วพวกเขามักจะเพิ่มการเพิ่มจำนวนการอ่าน) ดังนั้นมันอาจสมเหตุสมผลที่จะลบข้อ จำกัด ออกจากข้อมูลสำหรับประสิทธิภาพ . แต่เนื่องจากฐานข้อมูลส่วนใหญ่ที่มีผู้อ่านจำนวนมากกำลังมุ่งเน้นไปที่คุณกำลังเสียสละประสิทธิภาพไม่ใช่ปรับปรุง
และไม่มีสิ่งใดที่กล่าวถึงความจริงที่ว่าความสมบูรณ์ของข้อมูลได้รับการจัดการที่ดีกว่าในฐานข้อมูลเนื่องจากคุณต้องสร้างเพียงครั้งเดียวโดยที่ถ้าคุณทำงานทั้งหมดในรหัสคุณอาจต้องทำหลาย ๆ ครั้งสำหรับแอพหลายตัว ชั้นการเข้าถึงข้อมูลของคุณอย่างระมัดระวังและต้องการให้ทุกแอปเข้าถึง db เพื่อผ่านเลเยอร์เดียวกันนั้น)
หากคุณใช้ระบบฐานข้อมูลเชิงสัมพันธ์ฉันว่าทำไมคุณไม่ใช้มัน หากคุณไม่ต้องการข้อมูลเชิงสัมพันธ์ไปกับ Hadoop หรืออย่างอื่น
นักพัฒนาแอปพลิเคชันจำนวนมากคิดอย่างนั้น
เมื่อคุณถูกล่อลวงให้มอบหมายความถูกต้องของข้อมูลให้กับรหัสแอปพลิเคชันให้คิดว่า "โปรแกรมเมอร์ทุกคนและทุกแอปพลิเคชันที่ได้รับความนิยมจากฐานข้อมูลนี้ตั้งแต่ตอนนี้จนถึงเวลาสิ้นสุดจะต้องทำให้ถูกต้องทุกครั้ง"
อัตราต่อรองคืออะไร?
แม้ว่าจะมีประสิทธิภาพเพิ่มขึ้นก็ตาม แต่ก็ไม่สามารถเปรียบเทียบได้กับการกลับมาของ Referential Integrity และความสมบูรณ์ของข้อมูลทั่วไป
อีกต่อไปนานเป็นวันที่ฐานข้อมูลเป็นแหล่งข้อมูลใบ้ ใช้ประโยชน์จากพลังที่ RDBMS เสนอให้
การเพิ่มประสิทธิภาพไม่ใช่ทุกอย่างโดยเฉพาะอย่างยิ่งในขนาดเล็กเช่นนี้ แต่เมื่อคุณพบว่าคุณมีความสัมพันธ์กับคีย์ต่างประเทศที่แอปพลิเคชันของคุณควรจะบังคับใช้และปรากฎว่าไม่ใช่คีย์หลักในตารางอ้างอิงจากนั้นคุณจะสนใจน้อยมากเกี่ยวกับการเพิ่มประสิทธิภาพ (ถ้ามีฉันสามารถ ไม่พูดถึงลักษณะเฉพาะของมัน)
เป็นเรื่องธรรมดาที่จะวางข้อ จำกัด (คีย์ต่างประเทศ, เช็ค, ฯลฯ ) และดัชนีหากคุณกำลังโหลดข้อมูลที่มีขนาดใหญ่พอและเปิดใช้งาน / ใช้ข้อ จำกัด & ดัชนีอีกครั้งในภายหลัง การตรวจสอบนั้นมีค่าใช้จ่ายเวลา นั่นคือสมมุติว่าคุณไม่สามารถใช้ไวยากรณ์โหลดจำนวนมากของฐานข้อมูลได้ (รวมถึงการย่อขนาดการบันทึก)
เป็นไปไม่ได้ที่จะบอกว่าประสิทธิภาพจะเพิ่มขึ้นตามที่คาดหวังในแต่ละสถานการณ์มีความเป็นเอกลักษณ์ (ชนิดข้อมูลการออกแบบและอื่น ๆ ) วิธีเดียวที่จะรู้ได้อย่างแท้จริงคือการทดสอบ
มีสองสามครั้งเมื่อมีข้อ จำกัด เข้ามา:
เมื่อคุณต้องการใช้Single Table Inheritance (STI) ลองนึกภาพคุณขายให้ทั้งบุคคลและองค์กร คุณจะต้องมีตาราง "ปาร์ตี้" เดี่ยวซึ่งมีแถวเป็นรายบุคคลหรือ org STI หมายความว่าคุณต้องมีฟิลด์ที่สามารถ nullable ได้ซึ่งไม่ควรเป็น null Class Table Inheritance แก้ปัญหานี้ แต่มันยากสำหรับ ORM บางตัว Rubi ActiveRecord รองรับเฉพาะ STI เท่านั้น
เมื่อคุณต้องการสนับสนุนเอนทิตีเวอร์ชันแบบร่างนั่นอาจไม่ถูกต้องสมบูรณ์ คุณสามารถจัดเก็บร่างเป็น json ได้ แต่จากนั้นยากที่จะใช้ตัวระบุเดียวกันซ้ำอีกครั้งบนไคลเอนต์ - จินตนาการว่ามันถูกบันทึกด้วย id = 5, แก้ไขให้ไม่ถูกต้องและบันทึกอัตโนมัติเป็น draftid = 99 ในกรณีนี้ทุกสาขาของคุณอาจจะต้องเป็นโมฆะ