SQL Optimization

โดยปกติในการเขียนคำสั่งหรือภาษา SQL นั้น  เขียนขึ้นมาเพื่อใช้เข้าถึงข้อมูลจากในฐานข้อมูลเป็นหลัก  ซึ่งการเขียนที่แตกต่างกันเล็กน้อยก็ส่งผลกับความเร็วหรือประสิทธิภาพในการเข้าถึงข้อมูลด้วย  เลยอยากจะรวมตัวอย่างคร่าวๆ ที่มักพบกันบ่อย หรืออะไรเล็กๆ น้อยๆ แต่ส่งผลต่อความเร็วในการเข้าถึงข้อมูลอย่างมากเลย  Query ที่ให้ผลลัพธ์เหมือนกันทุกประการ  แตกต่างกันที่วิธีการเขียน SQL และเวลาที่ใช้ในการ Execute  ต่างกันระดับ millisecond  แต่หากเรากำลังจะเข้าถึงข้อมูลอันมีขนาดมหาศาลมันจะส่งผลอย่างมากเช่นกัน

 

Actual column names instead of *

คำสั่ง SQL จะทำงานได้เร็วขึ้น  ถ้าเราอ้างถึงชื่อฟิลด์ (Field) หรือ คอลัมส์ (Column) ใน  SELECT statement  แทนที่จะแทนทั้งหมดด้วยเครื่องหมาย  *     การ select เฉพาะฟิลด์ที่ต้องการใช้จริงๆ  ย่อมส่งผลให้ใช้เวลาน้อยลงนั่นเอง

 

 จากในรูปเห็นความแตกต่างเพียงเล็กน้อย Query แรกหลีกเลี่ยงการใช้ * ผลที่ได้ Execution Time น้อยกว่า Query ถัดมา

 

 

Having clause is like a filter

HAVING clause นั้นเปรียบเสมือนการกรองข้อมูล (Filter)  โดยมันจะทำการกรองข้อมูลหลังจาก select ข้อมูลมาครบทุกรายการแล้ว  ซึ่งควรหลีกเลี่ยง  และที่ควรทำคือการกรองข้อมูล (Filter) ในขณะที่ select ข้อมูลโดยใช้  WHERE  จะให้ประสิทธิภาพที่ดีกว่า

จากตัวอย่างในรูปก็จะเห็นชัดเจนในเรื่องการใช้  HAVING  ที่จะใช้เวลาในการ Query นานกว่าจริง

 

The number of subquery block in query

จำนวนของ subquery ที่อยู่ภายใต้ main query นั้นมีผลอย่างมากต่อความเร็วในการประมวลผลและเข้าถึงข้อมูล  ควรจะให้มีจำนวน subquery ให้น้อยเท่าที่สุดเท่าที่จะทำได้

 

 

Using EXISTS instead of DISTINCT

ใช้คำสั่ง EXISTS แทน DISTINCT  เมื่อมีการ join ข้อมูลกันใน table/view  ที่มีความสัมพันธ์แบบ one-to-many  โดยปกติจะได้ผลลัพธ์ที่ซ้ำๆ กันจากความสัมพันธ์ดังกล่าว   หากต้องการชุดข้อมูลที่ซ้ำแสดงเพียงรายการเดียว  โดยส่วนใหญ่ใช้คำสั่ง DISTINCT  ลองเปลี่ยนเป็น EXISTS แทนจะได้ผลลัพธ์เช่นเดียวกับคำสั่ง DISTINCT

 

 

UNION ALL in place of UNION

ใช้ UNION ALL แทนการใช้  UNION

 

 พอจะเป็นตัวอย่าง คร่าวๆ  สังเกตว่าเวลาที่ห่างกันเพียงเล็กน้อยเอง ระดับ millisecond  แต่ถ้าลองมองแล้ว  ถ้าจำนวนข้อมูลเยอะๆ  หรือ query ที่ซับซ้อนมากกว่านี้  จะส่งผลต่อเวลาอย่างมหาศาลเลย  ฉะนั้นเรื่องพื้นๆ ก็อย่ามองข้าม นะครับ

 

.

.

 

edit @ 21 Aug 2012 13:23:34 by รักกันมิสู้รู้ใจกัน

Comment

Comment:

Tweet