ขึ้นอยู่กับปริมาณข้อมูลที่เปลี่ยนแปลง สมมติว่าตารางนี้มี 20 คอลัมน์ และคุณยังมี 5 ดัชนี - แต่ละอันต่างกัน คอลัมน์.
ตอนนี้ถ้าค่าใน 20 คอลัมน์ทั้งหมดกำลังเปลี่ยนแปลงหรือแม้ว่าข้อมูลใน 5 คอลัมน์กำลังเปลี่ยนแปลงและ 5 คอลัมน์เหล่านี้ได้รับการจัดทำดัชนีทั้งหมดคุณอาจจะดีกว่า "การลบและแทรก" แต่ถ้ามีเพียง 2 คอลัมน์เท่านั้นที่เปลี่ยนแปลงและสมมติว่านี่ไม่ใช่ส่วนหนึ่งของดัชนีที่ไม่ใช่คลัสเตอร์ใด ๆ คุณอาจจะดีกว่า "อัปเดต" บันทึกเพราะในกรณีนี้เฉพาะดัชนีคลัสเตอร์จะได้รับการอัปเดต (และดัชนีจะไม่ต้อง ได้รับการปรับปรุง)
ในการวิจัยเพิ่มเติมฉันพบว่าความคิดเห็นข้างต้นโดยฉันเป็นประเภทที่ซ้ำซ้อนเนื่องจาก SQL Server ภายในมีกลไกที่แยกจากกัน 2 แบบสำหรับการดำเนินการ UPDATE - "การอัปเดตแบบแทนที่" (เช่นโดยการเปลี่ยนค่าคอลัมน์เป็นใหม่ในแถวเดิม) หรือเป็น "การอัปเดตแบบไม่เข้าแทนที่" (DELETE ตามด้วย INSERT)
การอัปเดตในสถานที่เป็นกฎและดำเนินการถ้าเป็นไปได้ แถวนี้จะอยู่ในตำแหน่งเดียวกันทั้งหมดในหน้าเดียวกันในขอบเขตเดียวกัน เฉพาะไบต์ที่ได้รับผลกระทบจะถูกเปลี่ยนแปลง tlog มีเพียงหนึ่งระเบียน (หากไม่มีทริกเกอร์การอัพเดท) การอัปเดตจะเกิดขึ้นหากมีการอัปเดตฮีป (และมีพื้นที่บนเพจเพียงพอ) การอัปเดตจะเกิดขึ้นเช่นกันหากคีย์การทำคลัสเตอร์เปลี่ยนไป แต่แถวนั้นไม่จำเป็นต้องย้ายเลย
ตัวอย่างเช่น: หากคุณมีดัชนีคลัสเตอร์ในชื่อและคุณมีชื่อ: สามารถเบเกอร์, ชาร์ลีตอนนี้คุณต้องการอัปเดตเบเกอร์เป็นเบกเกอร์ ไม่ต้องย้ายแถว ดังนั้นสิ่งนี้สามารถใช้แทน ในขณะที่หากคุณต้องอัปเดตสามารถไปที่ Kumar แถวนั้นจะต้องเปลี่ยน (แม้ว่าพวกเขาจะอยู่ในหน้าเดียวกัน) ในกรณีนี้ SQL Server จะทำการลบตามด้วย INSERT
จากการพิจารณาข้างต้นฉันขอแนะนำให้คุณทำการอัพเดทปกติและให้ SQL Server หาวิธีที่ดีที่สุดในการทำภายใน
. สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ "UPDATE" internals หรือว่าเรื่องใด ๆ ที่เกี่ยวข้องกับเซิร์ฟเวอร์ SQL internals ตรวจสอบเคเลนเดลานีย์, พอล Randal ของ, et al หนังสือ - SQL Server 2008 Internals