Columna de cardinalidad más alta primero en un índice cuando involucra un rango?
CREATE TABLE `files` (
`did` int(10) unsigned NOT NULL DEFAULT '0',
`filename` varbinary(200) NOT NULL,
`ext` varbinary(5) DEFAULT NULL,
`fsize` double DEFAULT NULL,
`filetime` datetime DEFAULT NULL,
PRIMARY KEY (`did`,`filename`),
KEY `fe` (`filetime`,`ext`), -- This?
KEY `ef` (`ext`,`filetime`) -- or This?
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Hay un millón de filas en la tabla. Los tiempos de archivo son en su mayoría distintos. Hay un número finito deext
valores. Asi que,filetime
tiene una alta cardinalidad yext
tiene una cardinalidad mucho más baja.
La consulta involucra tantoext
yfiletime
:
WHERE ext = '...'
AND filetime BETWEEN ... AND ...
¿Cuál de esos dos índices es mejor? ¿Y por qué