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 ในการทำงาน