12 SQL Server Optimizations That Slashed My Query Times by 98%

17-Dec-25

คัมภีร์เทพ IT

See the original english version Click here!

 

บทความนี้รวบรวม 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 เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

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