การใช้งาน 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';
ผลที่ได้เร็วมากๆ ลองเอาไปใช้ได้นะครับ
วันนี้นั่งทำ 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';
ผลที่ได้เร็วมากๆ ลองเอาไปใช้ได้นะครับ