วิธี 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;

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet