ขณะนี้เรามีฐานข้อมูลและแอปพลิเคชันที่มีอยู่ซึ่งทำงานได้อย่างสมบูรณ์ ฉันไม่มีความสามารถในการเปลี่ยนสถาปัตยกรรม ณ จุดนี้ วันนี้แต่ละตารางในฐานข้อมูลมีฟิลด์ "IsDeleted" NOT NULL BIT ที่มีค่าเริ่มต้นเป็น '0' เมื่อแอปพลิเคชัน "ลบ" ข้อมูลมันเพียงอัปเดตการตั้งค่าสถานะ IsDeleted เป็น 1
สิ่งที่ฉันมีปัญหาในการทำความเข้าใจคือดัชนีของแต่ละตารางควรมีโครงสร้างอย่างไร ตอนนี้ทุกแบบสอบถาม / เข้าร่วม / ฯลฯ จะดำเนินการตรวจสอบ IsDeleted เป็นมาตรฐานที่นักพัฒนาของเราต้องปฏิบัติตาม ที่ถูกกล่าวว่าฉันพยายามที่จะตรวจสอบว่าดัชนีคีย์หลักคลัสเตอร์ทั้งหมดของฉันในแต่ละตารางจะต้องมีการเปลี่ยนแปลงเพื่อให้รวมถึงคีย์หลักและฟิลด์ BIT IsDeleted นอกจากนี้เนื่องจากทุกแบบสอบถาม / เข้าร่วม / ฯลฯ ต้องใช้การตรวจสอบ IsDeleted เป็นข้อสมมติฐานที่เหมาะสมหรือไม่ที่ดัชนีทุกเดียว (ไม่ใช่คลัสเตอร์ด้วย) ควรรวมเขตข้อมูล IsDeleted เป็นเขตข้อมูลแรกของดัชนีหรือไม่
อีกคำถามหนึ่งที่ฉันมีคือดัชนีรอบตัวกรอง ฉันเข้าใจว่าฉันสามารถใส่ตัวกรองในดัชนีเช่น "WHERE IsDeleted = 0" เพื่อลดขนาดของดัชนี อย่างไรก็ตามเนื่องจากการเข้าร่วม / การสืบค้นทั้งหมดจะต้องใช้การตรวจสอบ IsDeleted นั่นจะป้องกันการใช้ดัชนีที่กรองแล้วหรือไม่ (เนื่องจากมีการใช้คอลัมน์ IsDeleted ในการเข้าร่วม / การสืบค้น)
จำไว้ว่าฉันไม่มีความสามารถในการเปลี่ยนวิธีการ IsDeleted
IsDeleted
คอลัมน์ไม่ว่าจะเป็นที่เก็บข้อมูลจริงหรือไม่ก็อาจทำให้รู้สึกถึงการเปิดเผยข้อมูลผ่านสองมุมมอง (เป็นทางเลือกในสคีมาที่แตกต่างกัน) การแก้ปัญหาการกำหนดพารามิเตอร์และการทำผิดพลาด เข้าถึงได้น้อย การเข้าถึงข้อมูลพื้นฐานนั้นเกี่ยวข้องกับกรณีที่เกิดขึ้นได้ยากซึ่งต้องรวมข้อมูลที่ถูกลบและไม่ถูกลบออกอย่างใดและเมื่อใดที่จำเป็นต้องสลับแถวเป็น "ลบ"