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, tomó 28 segundos inaceptables para determinar el número de registros hoy. 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. El motivo del bajo rendimiento es la llamada a la función FECHA: la función FECHA envía la columna indexada "creada" 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