SQL: bajo rendimiento a pesar del índice

Acabo de enfrentarme al siguiente problema de rendimiento de una base de datos SQL: en una tabla SQL llamada "usuarios" con ~ 1,000,000 de entradas, la determinación del número de registros hoy tomó unos inaceptables 28 segundos. Los tiempos de los registros se guardaron en el formato “Ymd H: i: s” en la columna “creado”.


La consulta utilizada

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

llevó a este tiempo de carga, aunque ya había un índice en la columna "creado" del formato DATETIME

ALTER TABLE `users` ADD INDEX `created` (`created`);

había sido establecido. La razón del bajo rendimiento es la llamada a la función de FECHA: La columna indexada "creada" es enviada por la función FECHA y hace que el índice sea ineficaz. El Optimizador de consultas solo conoce "creado", pero no el resultado de DATE (creado). La consulta optimizada

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

conduce al resultado deseado en un tiempo de 0,4 segundos.

Atrás