วิธี Query โดยสร้าง View ช่วย
posted on 16 Apr 2009 17:18 by nhephex in Knowledge.
กรณีที่คุณต้องการหาข้อมูลจาก Table หนึ่ง แล้วกำหนดเงื่อนไขยิบยับ ที่ไม่มี index การ Query จะใช้เวลานาน
วิธีการที่ Oracle เปิดโอกาสให้เราใช้คือ การสร้าง View ใน Query เพื่อกรองผลลัพธ์ ก่อนที่จะทำการใช้ where เพื่อกำหนดเงื่อนไขที่ต้องการ เช่น
เราต้องการ Query ข้อมูล table TBL_ABC เฉพาะ Type = 1 โดย กำหนดให้ field VALUE1 = 0, VALUE2 = 0, VALUE3 <>0
ถ้าเราเขียนตรงๆ ซื่อๆว่า
select ID from TBL_ABC where TYPE=1 and
VALUE1=0 and VALUE2=0 and VALUE3 <>0;
โดย ที่ทั้ง 3 field ไม่ได้เป็น index และจำนวน record มีจำนวนเป็นล้าน การ Query ย่อมนานมากๆ
วิธีใช้ view เข้าช่วย คือ
Step 1 สร้าง view โดยดึง field ที่ต้องการ กรอง ออกมา
select ID, VALUE1, VALUE2, VALUE3 from
TBL_ABC where TYPE=1;
Step 2 กำหนด Query นี้เป็น view ดังนี้
(select ID id, VALUE1 value1, VALUE2 value2, VALUE3 value3 from
TBL_ABC where TYPE=1) a_view
Step 3
select a_view.id from
(select ID id, VALUE1 value1, VALUE2 value2, VALUE3 value3 from
TBL_ABC where TYPE=1) a_view where
a_view.value1=0 and a_view.value2=0 and a_view.value3<>0;
และท้ายสุด จะช่วยให้เร็วขึ้นเยอะเลยครับ เมื่อเพิ่ม Hint
select /*+ NO_CPU_COSTING */ a_view.id from
(select /*+ NO_CPU_COSTING */
ID id, VALUE1 value1, VALUE2 value2, VALUE3 value3 from
TBL_ABC where TYPE=1) a_view where
a_view.value1=0 and a_view.value2=0 and a_view.value3<>0;
ทำไม ภาษาไทย จึงเป็นภาษาที่ใช้สมองมากกว่าภาษาอังกฤษ