คิดว่าดัชนีเป็น "สารบัญ" ... ซึ่งเป็นรายการคำสั่งของตัวชี้ไปยังตำแหน่งในไฟล์หรือที่รู้จักกันว่าออฟเซ็ต สมมติว่าคุณมีบันทึกหลายล้านระเบียนในตารางแทนที่จะค้นหาเกณฑ์การจับคู่ตารางจะเร็วกว่ามากในการอ้างอิงรายการที่สั่งซื้อสำหรับการจับคู่จากนั้นซ้อนตัวชี้ไปยังแถวการจับคู่ที่เฉพาะเจาะจง ตัวอย่างที่สมบูรณ์แบบของดัชนีคือเขตข้อมูลคีย์หลักของตารางโดยทั่วไปแล้วฟิลด์ "id" หากคุณต้องการ ID แถว # 11234566 มันเร็วกว่าถามดัชนีสำหรับตัวชี้ไปยังข้อมูลมากกว่าที่จะสแกนแหล่งข้อมูลสำหรับตำแหน่ง 11234566
นี่คือการใช้การจัดทำดัชนีที่ไม่ชัดเจนนัก:
CREATE TABLE activity_log (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
activity_type_id SMALLINT UNSIGNED NOT NULL,
datetime_created DATETIME
KEY(activity_type_id),
PRIMARY KEY(id)
);
CREATE TABLE activity_log_to_date_key (
activity_log_id INT UNSIGNED NOT NULL,
date_created_key INT UNSIGNED NOT NULL REFERENCES dim_datetime(id),
UNIQUE KEY(activity_log_id),
KEY(date_created_key)
);
CREATE TABLE dim_datetime (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
date_hour DATETIME NOT NULL,
PRIMARY KEY(id),
KEY(date_hour)
);
การดำเนินการของคุณสามารถสร้างบันทึกบันทึกของคุณ แต่จากนั้นสร้างการอ้างอิงไปยังวันที่และเวลาที่จัดทำดัชนีซึ่งเร็วกว่าการค้นหา / เรียงลำดับกว่าตารางบันทึกของคุณ จากนั้นเข้าร่วมตารางบันทึกของคุณด้วยคีย์หลักของตัวเอง หากคุณต้องการให้ฉันขยายเรื่องนี้โปรดแจ้งให้เราทราบ ฉันหวังว่านี่จะสมเหตุสมผล
แบบสอบถามตัวอย่าง:
SELECT a.activity_log_id, al.activity_type_id, al.datetime_created
FROM activity_log_to_date_key a
INNER JOIN dim_datetime d ON (d.id = a.date_created_key)
LEFT JOIN activity_log al ON (al.id = a.activity_log_id)
WHERE d.date_hour BETWEEN '2009-01-01 00:00:00' AND '2009-06-01 12:00:00';