ค่าใช้จ่ายของ Inserts
เทียบกับ Updates
ใน SQL Server: อันไหนมีประสิทธิภาพมากกว่ากัน?
เมื่อทำงานกับชุดข้อมูลขนาดใหญ่ โดยเฉพาะใน SQL Server การตัดสินใจที่สำคัญอย่างหนึ่งที่คุณต้องเผชิญคือวิธีการจัดการการแทรกและการอัปเดตข้อมูลอย่างมีประสิทธิภาพ ตัวอย่างเช่น หากคุณมีตารางที่มีแถวมากกว่าหนึ่งล้านแถวที่ใช้ในการจัดทำดัชนีภาพ tiff
การกำหนดวิธีการที่ดีที่สุดเมื่อผู้ใช้จัดทำดัชนีภาพกลุ่มจะเป็นประเด็นสำคัญ
ในบล็อกโพสต์นี้ เราจะสำรวจว่าการแทรก 500 แถวแล้วจึงทำการอัปเดตจะดีกว่าหรือไม่ หรือการจัดการแทรกข้อมูลทั้งหมด 500 แถวพร้อมกันหลังจากที่ผู้ใช้เสร็จสิ้นการจัดทำดัชนี
ความท้าทาย: การแทรกข้อมูลเทียบกับการอัปเดต
คุณอาจพบว่าตัวเองอยู่ในสถานการณ์ที่สามารถทำการแทรก 500 แถวได้ในคืนก่อนที่กระบวนการแบตช์ของคุณจะเริ่มต้น จุดศูนย์กลางของคำถามอยู่ที่การเข้าใจการแลกเปลี่ยนด้านประสิทธิภาพระหว่างการแทรกที่เกิดซ้ำตามด้วยการอัปเดตเทียบกับการแทรกข้อมูลจำนวนมากทั้งหมด
การเข้าใจการแทรกและการอัปเดตใน SQL Server
เกิดอะไรขึ้นเมื่อทำการอัปเดต?
เมื่อคุณทำการอัปเดตใน SQL Server:
- แถวผี: แถวต้นฉบับจะถูกทำเครื่องหมายว่า “เป็นผี” หมายความว่ามันถูกขีดฆ่าแต่ยังไม่ได้ถูกลบออกในทันที จะมีการแทรกเวอร์ชันใหม่
- การค้นหาแถว: SQL Server จะต้องค้นหาแถวที่มีอยู่ก่อนเพื่อทำการอัปเดต ซึ่งจะใช้เวลาเพิ่มเติมในการดำเนินการโดยรวม
- การแบ่งหน้า: การอัปเดตอาจนำไปสู่การแบ่งหน้า—เมื่อแถวได้รับการอัปเดตในลักษณะที่จำเป็นต้องย้ายแถวอื่น ๆ ซึ่งอาจทำให้ประสิทธิภาพช้าลง
กระบวนการแทรกข้อมูล
ในทางตรงกันข้าม ในระหว่างการแทรกข้อมูล:
- การเพิ่มข้อมูลอย่างตรงไปตรงมา: ข้อมูลใหม่จะถูกเพิ่มเข้าไปยังตารางโดยตรงโดยไม่จำเป็นต้องค้นหาแถวที่มีอยู่
- ความเร็ว: การแทรกสามารถทำได้เร็วขึ้นอย่างมาก โดยเฉพาะหากเป็นการแทรกแบบต่อเนื่องหรือหากตารางพื้นฐานไม่มีดัชนีแบบกลุ่ม
ปัจจัยสำคัญในประสิทธิภาพ
1. ความถี่ของการแบ่งหน้า
ทั้งการแทรกข้อมูลและการอัปเดตสามารถกระตุ้นให้เกิดการแบ่งหน้า แต่การอัปเดตมักมีแนวโน้มที่จะประสบปัญหานี้มากกว่าหลังจากที่มันต้องการการค้นหาแถวก่อนเข้าใจได้ว่าวิธีการจัดการดัชนีของคุณมีโครงสร้างเป็นอย่างไร
2. ดัชนีส่งผลต่อประสิทธิภาพ
เมื่อจัดการกับข้อมูลจำนวนมาก:
- ตรวจสอบดัชนีที่มีอยู่: ดัชนีที่ไม่ได้เพิ่มประสิทธิภาพสามารถทำให้เวลาการดำเนินงานนานขึ้นเพราะจะต้องมีการอัปเดตหรือสร้างใหม่
- การแทรกข้อมูลแบบต่อเนื่อง (เช่น การเพิ่มท้าย) จะเร็วกว่าการแทรกข้อมูลลงไปกลางดัชนี
3. เปรียบเทียบ: การเพิ่มข้อมูลในสมุดที่อยู่
- การแทรกข้อมูล: การเพิ่มข้อมูลใหม่ เช่น คุณ Z เป็นเรื่องง่าย—คุณเพียงแค่เขียนมันในหน้าสุดท้าย
- การอัปเดต: หากคุณต้องการเพิ่มคุณ M คุณอาจต้องจัดเรียงหน้าเพื่อหาที่ที่เหมาะสม
สรุป: คุณควรเลือกอะไร?
ตามที่พิจารณาในข้างต้น หากเวลาและประสิทธิภาพมีความสำคัญ:
- เลือกการแทรกข้อมูลจำนวนมาก: หากคุณสามารถทำการแทรก 500 แถวทั้งหมดในครั้งเดียวหลังจากที่ผู้ใช้เสร็จสิ้นการจัดทำดัชนี นี่มักจะเป็นวิธีที่ดีกว่า
- จำกัดการอัปเดต: คิดว่าควรจะทำการอัปเดตเฉพาะเมื่อจำเป็นจริง ๆ โดยเฉพาะเมื่อจัดการกับชุดข้อมูลขนาดใหญ่
โดยการพิจารณาอย่างรอบคอบเกี่ยวกับแนวทางของคุณกับการแทรกและการอัปเดต คุณสามารถเพิ่มประสิทธิภาพของการดำเนินงาน SQL Server ของคุณได้อย่างมาก ทำให้เกิดประสบการณ์ที่ตอบสนองมากขึ้นสำหรับผู้ใช้ของคุณ
การปรับวิธีการของคุณตามความเข้าใจในกลไกพื้นฐานจะนำไปสู่การดำเนินงานที่ราบรื่นและการขัดแย้งในสภาพแวดล้อมของฐานข้อมูลของคุณน้อยลง