ข้ามไปที่เนื้อหาหลัก

บทความ

การใช้ AND

การใช้ AND ควรกำหนดเงื่อนไขที่ให้คำตอบเป็นจริงน้อยที่สุดไว้ในส่วนแรก เพราะเมื่อเจอ คำตอบที่เป็นเท็จ ก็จะไม่ตรวจสอบเงื่อนไขถัดไปแล้ว

สร้าง Index (ใน database) ที่มี date เป็นส่วนประกอบให้ใช้ date

สร้าง Index (ใน database) ที่มี date เป็นส่วนประกอบให้ใช้ date นำหน้า เช่น reftype, refdate, refno ควรเปลี่ยนเป็น refdate,reftype,refno เนื่องจาก refdate มีการกระจายของข้อมูลมากกว่า reftypeหมายเหตุ : เมื่อ SQL พบ where refdate = ? จะทำให้กรองข้อมูลให้เหลือน้อยกว่า (เช่น ถ้ามี 50 วัน ก็จะทำให้เหลือข้อมูล เพียง 1/50 ซึ่งเมื่อมี cause ที่สองจำนวน record ที่ต้องผ่านจะลดลงมาก) ใน ขณะที่ where reftype = ‘BU’ (ถ้า reftype = ‘BU’,’SE’ จะทำให้เหลือข้อมูลถึง ฝ)

ใน where cause ให้ check เงื่อนไขของแต่ละ Table ก่อน แล้วจึงเช็คเงื่อนไขในการ join กัน เช่น where a.*** = ? and

ใน where cause ให้ check เงื่อนไขของแต่ละ Table ก่อน แล้วจึงเช็คเงื่อนไขในการ join กัน เช่น where a.*** = ? and  a.yyy = ? and  b.zzz = ? and  a.aaa = b.aaa  ดีกว่า where a.aaa = b.aaa and  a.*** = ? and b.zzz = ? and a.yyy = ?  หมาย เหตุ : ตามทฤษฏีของ Database ลำดับของ where cause ไม่ควรมีความสำคัญต่อ Performance แต่ในความเป็นจริง การ เรียงลำดับให้ เงื่อนไขในการหา อยู่เรียงตามลำดับของ Table ของเงื่อนไขนั้นๆ และมาก่อนเงื่อนไขในการ join ระหว่าง table ทำให้ performance เร็วขึ้นมาก

join table ให้ table ขนาดเล็ก (ที่ผ่าน where cause แล้ว) ขึ้นก่อน

join table ให้ table ขนาดเล็ก (ที่ผ่าน where cause แล้ว) ขึ้นก่อน เช่น ต้องการ join JTR กับ MCSD ให้ใช้ from jtr a,mcsd b (JTR ที่ผ่าน where cause แล้วมีขนาดเล็กกว่า MCSD ที่ผ่าน where cause) หมายเหตุ : ตามทฤษฏี Database ควรจะทราบว่า หา Table ใดก่อน จะ Optimize ที่สุด แต่ในความเป็นจริง Informix จะใช้ Table แรกเป็น major table ในการ scan ผ่าน Table ที่สอง ผลก็คือ การที่ JTR มีจำนวน row น้อยกว่า mcsd ทำให้ใช้เวลาน้อยกว่าในการหา condition ใน where cause พบ 

หลีกเลี่ยงการให้ not in ใน where cause ถ้าสามารถระบุได้ว่าข้อมูลที่ต้องการคืออะไร

 หลีกเลี่ยงการให้ not in ใน where cause ถ้าสามารถระบุได้ว่าข้อมูลที่ต้องการคืออะไร เช่น custtype มี 1,2,3,4,5 ถ้า Report นี้ไม่ต้องการพิมพ์ข้อมูลของลูกค้า Foreign และ Port ให้ใช้ where custtype in (‘1’,’3’,’4’) ไม่ควรใช้ where custtype not in (3,5) หมาย เหตุ : not in ทำให้ optimizer ไม่สามารถทำงานได้ (ใช้ index ไม่ได้) ถ้าทราบว่า custtype มีค่าเป็นอะไรได้บ้าง การใช้ in จะดีกว่ามาก

3. ใช้ EXISTS เร็วกว่า IN แน่นอน

3. ใช้ EXISTS เร็วกว่า IN แน่นอน      ยกตัวอย่างอันนี้ผมใช้ใน Oracle นะครับ     select f1,f2,f3 from my_table where     exists (select 1 from dual where f1=1 or f1=2 or f1=3)      เร็วกว่า     select f1,f2,f3 from my_table where     f1 in (1,2,3)     ฟันธง