Piense en un índice como "tabla de contenido" ... que es una lista ordenada de punteros a posiciones en un archivo, también conocido como compensaciones. Supongamos que tiene millones de registros almacenados en una tabla, en lugar de buscar criterios coincidentes en la tabla, es mucho más rápido hacer referencia a una lista ordenada de coincidencias, luego apilar los punteros a las filas coincidentes específicas. Un ejemplo perfecto de un índice es un campo de clave primaria de tablas, más típicamente su campo "id". Si desea la ID de fila # 11234566, es mucho más rápido pedirle al índice un puntero a los datos que escanear la fuente de datos para la posición 11234566.
Aquí hay un uso no tan obvio de la indexación:
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)
);
Su operación puede crear su registro de registro, pero luego crear una referencia a una fecha y hora indexada que sea más rápida de buscar / ordenar que su tabla de registro. Luego, vuelva a unir su tabla de registro en su propia clave principal. Si necesita que amplíe esto, hágamelo saber. Espero que esto tenga sentido.
Consulta de muestra:
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';