การใช้งาน Index ใน Oracle และเทคนิคการใช้ HINT

บทความเกี่ยวกับ : การใช้งาน Index ใน Oracle และเทคนิคการใช้ HINT


วันนี้นั่งทำ Query อยู่พบข้อสังเกตุอะไรบางอย่าง กับการสร้าง index ใน Oracle
ด้วยความที่เราไม่ได้มีความรู้มากมายเท่าทางสาย DBA แต่ก็ได้อาศัยลองผิดลองถูกเรื่อยๆมา
วันนี้จะมาเล่ากรณีศึกษาให้ฟัง 

ยกตัวอย่าง ผมสร้าง index  ให้กับ table ผมไว้ สอง Field คือ 
field_a   index ชือ indx_a
field_b   index ชื่อ indx_b

ลอง Query data ดูพบว่า
select * from my_table where field_a='xxx'; ผลที่ได้เร็วมากๆ
select * from my_table where field_b='xxx'; ผลที่ได้เร็วมากๆ

แต่พอลองแบบนี้

select * from my_table where field_a='xxx' and field_b='yyy';
ผลที่ได้ปรากฏว่าหน่วงขึ้นอย่างเห็นได้ชัดเจน

ผมก็งงว่าทำไปเป็นอย่างงั้นในเมื่อเราก็ Query ด้วย index ทั้งสอง Field
ลองถามเพื่อๆ ที่เก่งด้านนี้ดู เค้าบอกว่าให้สร้าง index สอง Field นี้ต่อกันเป็นแบบนี้

create index indx_ab on my_table (field_a,field_b)

ลองสร้างและลอง Query แบบเดิมดูพบว่าเร็วจริงตามที่คาดไว้
   แต่ผมเองก็ไม่เข้าใจว่าจะไปสร้าง index อะไรมากมายขนาดนั้นเลยลอง Search ดูจึงพบว่าสามารถใช้ HINT ช่วยได้เนื่องจากกรณีนี้ถ้าเรา Query ด้วย index เดียวๆ เราพบว่ามันเร็ว ดังนั้นเราก็แค่ใส่ HINT เข้าไปบอก Oracle
ว่าเราขอให้ใช้ index ตัวนี้

select   /*+INDEX(mt,indx_a)*/ * from my_table mt where field_a='xxx' and field_b='yyy';

ผลที่ได้เร็วมากๆ  ลองเอาไปใช้ได้นะครับ

โพสต์ยอดนิยมจากบล็อกนี้

java -Xms , java -Xmx กำหมด memory ให้ JVM เพื่อป้องกันปัญหา Out of Memory

Oracle date format จัด format date ให้แสดง พศ และ เดือน ภาษาไทยหรือตามภาษาที่เราเลือก

Java this กับ super การใช้งานคำสั่ง this กับ super ใน ภาษา Java