একটি সূচিটিকে "বিষয়বস্তুর সারণী" হিসাবে ভাবুন ... এটি কোনও ফাইলের মধ্যে পয়েন্টারগুলির অর্ডার করা তালিকা, ওরফে অফসেট। বলুন যে আপনার মিলিয়নে মিলিয়ন মিলিয়ন রেকর্ড সঞ্চিত মানদণ্ডের জন্য টেবিলটি অনুসন্ধানের চেয়ে মিলের জন্য আদেশযুক্ত তালিকার রেফারেন্স করা আরও দ্রুত, তারপরে নির্দিষ্ট মেলানো সারিগুলিতে পয়েন্টারগুলি স্ট্যাক করুন। সূচকের একটি নিখুঁত উদাহরণ হল একটি সারণী প্রাথমিক কী ক্ষেত্র, সাধারণত এটির "আইডি" ক্ষেত্র। আপনি যদি সারি আইডি # 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';