GORAGOD.com

freelance, web developer, web designer, hosting, domain name

การเพิ่มความเร็วในการ QUERY เดือนและปีในฐานข้อมูลชนิด DATETIME

การเพิ่มความเร็วในการ QUERY เดือนและปีในฐานข้อมูลชนิด DATETIME
การค้นหาข้อมูลจากปีและเดือนในข้อมูลชนิด DATETIME ถ้า Query ผิดวิธีจะทำให้ Query ข้อมูลไม่มีประสิทธิภาพ

ยกตัวอย่างการเลือกข้อมูล ในเดือนมีนาคม ปี คศ.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 กับ Query ลักษณะนี้ได้

วิธีที่จะทำให้สามารถใช้งาน 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 หรือยัง
จากรูป จะเห็นว่ามีการกระทำกับจำนวนแถวลดลงอย่างมาก เนื่องจากมีการใช้ Index ในการ Query ข้อมูล

นอกจากนี้ยังสามารถใช้ BETWEEN แทน > < และ = ได้เช่นกัน (วิธีนี้จะมีประสิทธิภาพดีกว่าเล็กน้อย เนื่องจาก BETWEEN จะทำการเลือกข้อมูลที่เจาะจงมากกว่า แต่อาจจะทำให้ QUERY ดูเข้าใจยากนิดนึง)
SELECT `time` FROM `logs` WHERE `time` BETWEEN "2023-03-01 00:00:00" AND "2023-03-31 23:59:59";
0SHAREFacebookLINE it!
^