การใช้งาน 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';

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

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

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

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

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