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 เป็นเพื่อนนะคะ
บทความล่าสุด

