12 เทคนิคปรับแต่ง SQL Server ให้ Query เร็วขึ้นกว่าเดิม

17-ธ.ค.-25

คัมภีร์เทพ IT

บทความนี้รวบรวม 12 เทคนิคปรับแต่ง SQL Server ให้ Query เร็วขึ้นกว่าเดิม ซึ่งเป็นการเพิ่มประสิทธิภาพการ Query ให้ Run ได้เร็วขึ้น ซึ่งเหมาะสำหรับ Database Administrators และ SQL Developers ที่ต้องการลดเวลา Run รายงานหรือ Query ที่มีขนาดใหญ่

หมายเหตุ: * ผลลัพท์ในบทความนี้ อ้างอิงจากสิ่งที่ผู้เขียนระบุไว้

1. แทนที่ SELECT * ด้วยการระบุ Column ที่ต้องการ

ปัญหา: การดึงข้อมูลทุก Columns ทำให้ต้อง Scan ข้อมูลที่มากเกินความจำเป็น

ก่อน:

หลัง:

ทำไมจึงได้ผล: SQL Server จะดึงเฉพาะ Columns ที่ต้องการ ทำให้ช่วยลดการใช้งาน I/O และ Memory

ผลลัพธ์: เวลาที่ใช้ Run Query ลดลงอย่างชัดเจน

ข้อคิดสำคัญ: เลือกเฉพาะสิ่งที่คุณต้องการก็พอ

2. ใช้ Index ให้เหมาะสม

ปัญหา: การ Query บ่อยครั้ง ทำให้ต้อง Scan ทั้ง Tables

แนวทางแก้ไข: สร้าง Nonclustered Index บน Column ที่ใช้บ่อย

ทำไมจึงได้ผล: Index จะช่วยให้ SQL Server ค้นหา Row ได้เร็วขึ้นโดยไม่ต้อง Scan ทั้ง Tables

ผลลัพธ์: จำนวน Logical Reads ลดลงได้อย่างมาก

ข้อคิดสำคัญ: Index ก็เปรียบเสมือน GPS ของ Query

3. อัปเดต Statistics ที่ล้าสมัย

ปัญหา: Optimizer เลือกแผนประมวลผลที่ไม่เหมาะสม เนื่องจากข้อมูล Statistics ไม่ทันสมัย

แนวทางแก้ไข:

ทำไมจึงได้ผล: Statistics ใหม่จะช่วยให้ Execution Plans มีความแม่นยำขึ้น

ผลลัพธ์: เวลาที่ใช้ในการ Query ลดลง

ข้อสังเกต: ถ้า Statistics ไม่อัปเดต ประสิทธิภาพของ Query ก็จะช้าลงตามไปด้วย

4. แทนที่ OR ด้วย IN หรือ UNION ALL

ปัญหา: การใช้ OR จะทำให้ Index ไม่ถูกใช้งาน

ทำไมจึงได้ผล: IN จะช่วยให้ Optimizer ใช้ Index ในการค้นหาแทนการ Scan

ผลลัพธ์: เวลาที่ใช้ Run ลดลงประมาณครึ่งหนึ่ง

ข้อสังเกต: ใช้ OR อย่างระมัดระวัง

5. หลีกเลี่ยงการใช้ Function บน Column ที่มี Index

ปัญหา: Function มีการปิดการใช้งาน Index

ก่อน:

หลัง:

ทำไมจึงได้ผล: วิธีนี้ช่วยให้ Column สามารถใช้เป็นเงื่อนไขค้นหาได้ (“Sargable” => Search-Argument-Able)

ข้อสังเกต: ไม่ควรใส่ Function ใน WHERE Clause ของ Column ที่มี Index

6. แปลง Correlated Subquery เป็น JOIN

ปัญหา: Nested Loops ทำให้ Query ช้าลง

ก่อน:

หลัง:

ผลลัพธ์: ลดเวลาในการ Query อย่างมีนัยสำคัญ

ข้อสังเกต: JOIN มักเร็วกว่าการใช้ Subquery

7. Filter ข้อมูลตั้งแต่เนิ่นๆ

ปัญหา: การใส่เงื่อนไข Filter ในขั้นตอนท้าย ๆ ส่งผลให้ต้องประมวลผลข้อมูลส่วนเกินจำนวนมากโดยไม่จำเป็น

แนวทางแก้ไข: ใส่เงื่อนไข WHERE ลงใน CTE หรือ Derived Table ให้เสร็จก่อน แล้วค่อยนำไป JOIN

ข้อสังเกต: การ Filter ข้อมูลตั้งแต่ต้น จะช่วยลดข้อมูลที่ SQL Server ต้องประมวลผล

8. ใช้ Indexed Views

ปัญหา: การคำนวณค่าแบบ Aggregation ซ้ำๆ หลายรอบ เป็นสาเหตุให้ Report ประมวลผลช้าลง

แนวทางแก้ไข:

ผลลัพธ์: ลดเวลาในการ Generate Report ได้พอสมควร

ข้อสังเกต: การเตรียม Aggregation ล่วงหน้า จะช่วยเพิ่มประสิทธิภาพได้

9. แยก Query ซับซ้อนเป็น Temp Tables

ปัญหา: Optimizer มักมีการจัดการ Query ขนาดใหญ่ได้ไม่ดี

แนวทางแก้ไข:

ข้อสังเกต: Query ที่มีขนาดเล็ก มักจะประมวลผลได้รวดเร็วกว่า

10. แทนที่ DISTINCT ด้วย GROUP BY

ปัญหา: DISTINCT อาจซ่อนปัญหา Join ที่ไม่ถูกต้อง

แนวทางแก้ไข: ใช้การ GROUP BY สำหรับ Aggregation แทนการลบข้อมูลที่ซ้ำกัน

ข้อสังเกต: ควรใช้ DISTINCT เมื่อจำเป็นจริงๆ เท่านั้น

11. Match Data Types ใน JOIN

ปัญหา: การใช้ชนิดข้อมูลที่ไม่ตรงกัน ทำให้ระบบแปลงข้อมูลอัตโนมัติ ส่งผลให้เกิด Table Scan

แนวทางแก้ไข:

ข้อสังเกต: การใช้ชนิดข้อมูลที่ไม่ตรงกัน เป็นสาเหตุที่ทำให้ Query ช้าลงโดยไม่รู้ตัว

12. ลบ Index ที่ไม่ใช้

ปัญหา: การมี Index มากเกินไป ทำให้ Insert/Update/Write ช้าและเปลืองพื้นที่

แนวทางแก้ไข: ให้ตรวจสอบ Index ที่ไม่ใช้งาน แล้วทำการลบออก

ข้อสังเกต: ทุก Index ล้วนมีภาระในการ Maintenance

สรุป

และนี่ก็เป็น 12 เทคนิคปรับแต่ง SQL Server ให้ Query เร็วขึ้นกว่าเดิม นอกจากนี้ยังช่วยเพิ่มประสิทธิภาพของ SQL Server ทำให้ Report และ Query ที่มีขนาดใหญ่สามารถ Run ได้เร็วขึ้น, ลดภาระของระบบ และบริหาร Database ได้มีประสิทธิภาพขึ้น

ที่มา: https://awstip.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด