Tip: กับการเขียน DB2
ผมพบปัญหาว่า SQL แล้วเครื่องทำงาน "ช้า"สิ่งแรกที่ผมจะทำคือ ปรับ SQL ถ้ายังไม่ดีขึ้น จะสร้าง Index, L-File
ตัวอย่างวันนี้ ผมสงสัยกับการเขียน SQL แบบต่างๆ มีผลต่อความเร็วหรือไม่ ?
File ที่มี Field = Y,M,D แยกกัน (พบบ่อย ในระบบที่สร้างมานาน)
มักจะสร้าง Logical-File ที่มี Key แบบนี้ Y,M,D
Q: การเขียน SQL Statement แบบไหน ทำงานเร็วที่สุด
(1) sql ... เขียนตาม หลักการข้างต้น
and Y = wFromY and M =wFromM and D>= wFromD
and Y = wToY and M =wToM and D<= wToD
2) ...sql...
and (Y = wFromY and M =wFromM and D>= wFromD)
and (Y = wToY and M =wToM and D<= wToD)
3) ...sql...
and Y|| M || D >= wFromY || wFromM || wFromD
and Y|| M || D <= wToY || wToM || wToD
ใคร เลือกข้อ 1) เขียนผิดน๊ะครับ ลองทดสอบข้อมูล ดูในช่วงนี้ 2014/06/25 - 2014/07/02
ตัวผม มักเลือก ข้อ 2)
เพราะเคยอ่านคำแนะนำพบว่า การสร้าง Field ใหม่ DB Engine จะทำงาน "หนัก"
เพื่อลดข้อสงสัย ก็ต้องใช้ Visual Explain ตรวจดู
>> ข้อ 3 ทำงานเร็วกว่า ข้อ 2 ... ดูจาก Total Estimate Run Time
Visual Explain ของ SQL ข้อ 2
Visual Explain ของ SQL ข้อ 3
คำอธิบาย (แก้ตัว) ที่ดีคือ
DB Engine จะทำการแปล SQL แล้วเลือก วิธีที่เร็วที่สุด โดยการเปรียบเทียบกับกรณีต่างๆ
นับเป็นรายละเอียดที่ เข้าใจยาก ....
แต่ทดสอบ การเดาผ่าน Visual Explain ได้
ถ้าไปสัมนากับ IBM เขาจะแนะนำว่า Table (File) ที่จำนวน rows มาก
, มีความหลากหลายมาก ควรสร้าง Index (L-File) ควรสร้าง Index File
จากภาพ Visual Explain มุมขวาล่าง Table Scan (= การอ่านตามลำดับ ก่อน/หลัง)
เมื่อกดเลือก ด้านขวาจะให้ข้อมูล และ แนะนำ
- File ตัวนี้ใหญ่ มี 3 ล้าน Rows , เพื่อความเร็ว ควรสร้าง Index File
>> ถ้าผมต้องการให้เร็วขึ้น ก็ต้องสร้าง L-File แล้วครับ