Pikirkan indeks sebagai "daftar isi" ... yang merupakan daftar petunjuk pointer ke posisi dalam file, alias offset. Katakanlah Anda memiliki jutaan catatan yang disimpan dalam sebuah tabel, daripada mencari tabel untuk kriteria yang cocok, itu jauh lebih cepat untuk merujuk daftar yang sesuai dengan daftar, kemudian menumpuk pointer ke baris yang cocok. Contoh indeks yang sempurna adalah bidang kunci utama tabel, biasanya bidang "id" -nya. Jika Anda ingin id baris # 11234566, itu jauh lebih cepat meminta indeks untuk pointer ke data daripada memindai sumber data untuk posisi 11234566.
Inilah penggunaan pengindeksan yang tidak begitu jelas:
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)
);
Operasi Anda dapat membuat catatan log Anda, tetapi kemudian membuat referensi ke waktu indeks yang lebih cepat untuk mencari / mengurutkan dari tabel log Anda. Kemudian gabungkan kembali tabel log Anda dengan kunci utama sendiri. Jika Anda membutuhkan saya untuk memperluas ini, beri tahu saya. Saya harap ini masuk akal.
Permintaan sampel:
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';