การเพิ่มความเร็วในการ QUERY เดือนและปีในฐานข้อมูลชนิด DATETIME
ยกตัวอย่างการเลือกข้อมูล ในเดือนมีนาคม ปี คศ.2023 ปกติจะเขียน Query กันตามนี้
SELECT `time` FROM `logs` WHERE YEAR(`time`)=2023 AND MONTH(`time`)=3;
ปกติแล้วการเพิ่มความเร็วในการ Query สามารถทำได้โดยการทำ Index ให้กับข้อมูลที่จะ Query
ALTER TABLE `logs` ADD INDEX (`time`);
แต่ปัญหาก็คือ การใช้คำสั้ง YEAR MONTH DAY DATE TIME กับคอลัมน์ชนิด DATETIME จะไม่สามารถใช้งาน Index ได้
วิธีที่จะทำให้สามารถใช้งาน Index กับข้อมูลชนิด DATETIME ได้คือการใช้คำสั่ง มากกว่า(>) น้อยกว่า(<) และเท่ากับ(=) กับข้อมูลชนิด DATETIME ยกตัวอย่างการเลือกข้อมูล ในเดือนมีนาคม ปี คศ.2023 จะเขียนได้ดังนี้
SELECT `time` FROM `logs` WHERE `time`>="2023-03-01 00:00:00" AND `time`<"2023-04-01 00:00:00";
ลองตรวจสอบว่ามีการใช้ Index หรือยัง
นอกจากนี้ยังสามารถใช้ BETWEEN แทน > < และ = ได้เช่นกัน (วิธีนี้จะมีประสิทธิภาพดีกว่าเล็กน้อย เนื่องจาก BETWEEN จะทำการเลือกข้อมูลที่เจาะจงมากกว่า แต่อาจจะทำให้ QUERY ดูเข้าใจยากนิดนึง)
SELECT `time` FROM `logs` WHERE `time` BETWEEN "2023-03-01 00:00:00" AND "2023-03-31 23:59:59";