Oracle create index field datetime ด้วย Function-based indexes
บ่อยครั้งที่เรามีข้อมูลเก็บใน field ที่เป็น data type Datetime
และมีความจำเป็นต้อง search ด้วยเงื่อนไขของ field นี้
โดยปรกติ เราจะสร้าง index บน Oracle ใน field ที่เราใช้เป็นเงื่อนไข เช่น
create index f_datetime_indx on my_table(f_datetime);
หากเราทำการค้นหา เช่น
select * from my_table where f_datetime = sysdate;
คำสั่งแบบนี้ Oracle จะใช้ index ในการทำงาน
แต่ถ้าหากเราต้องการ Query ข้อมูลทั้งวันเรามักจะใช้คำสั่ง trunc(d) เช่น
select * from my_table where trunc(f_datetime) = trunc(sysdate)
ปัญหาจะเกิดขึ้นทันทีเพราะ Oracle จะไม่ใช้ index และจะกลายเป็น Full table scan
แนวทางแก้คือให้ใช้ Function-based indexes ตามตัวอย่าง
create index f_datetime_indx on my_table(trunc(f_datetime));
เพียงเท่านี้เราสามารถ Query field date โดยใช้ function trunc ใน where condition
ได้เลย และ oracle จะใช้ index ในการทำงาน
และมีความจำเป็นต้อง search ด้วยเงื่อนไขของ field นี้
โดยปรกติ เราจะสร้าง index บน Oracle ใน field ที่เราใช้เป็นเงื่อนไข เช่น
create index f_datetime_indx on my_table(f_datetime);
หากเราทำการค้นหา เช่น
select * from my_table where f_datetime = sysdate;
คำสั่งแบบนี้ Oracle จะใช้ index ในการทำงาน
แต่ถ้าหากเราต้องการ Query ข้อมูลทั้งวันเรามักจะใช้คำสั่ง trunc(d) เช่น
select * from my_table where trunc(f_datetime) = trunc(sysdate)
ปัญหาจะเกิดขึ้นทันทีเพราะ Oracle จะไม่ใช้ index และจะกลายเป็น Full table scan
แนวทางแก้คือให้ใช้ Function-based indexes ตามตัวอย่าง
create index f_datetime_indx on my_table(trunc(f_datetime));
เพียงเท่านี้เราสามารถ Query field date โดยใช้ function trunc ใน where condition
ได้เลย และ oracle จะใช้ index ในการทำงาน
ความคิดเห็น
แสดงความคิดเห็น