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



ความคิดเห็น

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

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

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

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