एक सूचकांक को "सामग्री की तालिका" के रूप में सोचें ... यह एक फ़ाइल, उर्फ ऑफ़सेट्स में स्थिति के लिए एक आदेशित सूची है। यह कहें कि आपके पास मिलान मापदंड के लिए तालिका खोजने के बजाय किसी तालिका में लाखों रिकॉर्ड संग्रहीत हैं, यह मैचों के लिए एक ऑर्डर की गई सूची को संदर्भित करने के लिए बहुत तेज़ है, फिर पॉइंटर्स को विशिष्ट मिलान पंक्तियों में स्टैक करें। एक इंडेक्स का एक आदर्श उदाहरण एक टेबल प्राथमिक कुंजी फ़ील्ड है, जो आमतौर पर "आईडी" फ़ील्ड है। यदि आप पंक्ति आईडी # 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';