Estructura de tabla:índice de fecha y hora de MySQL no está funcionando
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| total | int(11) | YES | | NULL | |
| thedatetime | datetime | YES | MUL | NULL | |
+-------------+----------+------+-----+---------+----------------+
filas en total:
mysql> explain select * from out where thedatetime <= NOW();
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | out | ALL | thedatetime | NULL | NULL | NULL | 137967 | Using where |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+
La consulta real es mucho más larga con más uniones entre tablas, el punto es, que pueda Obtenga la tabla para usar el índice datetime
. Esto va a ser difícil para mí si quiero seleccionar todos los datos hasta cierta fecha. Sin embargo, noté que puedo hacer que MySQL use el índice si selecciono un subconjunto más pequeño de datos.
mysql> explain select * from out where thedatetime <= '2008-01-01';
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+
| 1 | SIMPLE | out | range | thedatetime | thedatetime | 9 | NULL | 15826 | Using where |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+
mysql> select count(*) from out where thedatetime <= '2008-01-01';
+----------+
| count(*) |
+----------+
| 15990 |
+----------+
Entonces, ¿qué puedo hacer para asegurarme de que MySQL usará el índice sin importar la fecha que puse?
Como 'EXPLAIN' indica que el índice es 'usado', o más correctamente, * se considera * - en ambos casos. Mi respuesta a continuación explica en detalle. Por otro lado, si * estás * experimentando un mal rendimiento, entonces has simplificado demasiado la pregunta. – Unreason