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



ความคิดเห็น

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

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

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

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