Coluna de cardinalidade mais alta primeiro em um índice ao envolver um intervalo?
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 ;
Há um milhão de linhas na tabela. As filetime são principalmente distintas. Há um número finito deext
valores. Assim,filetime
tem uma alta cardinalidade eext
tem uma cardinalidade muito menor.
A consulta envolve ambosext
efiletime
:
WHERE ext = '...'
AND filetime BETWEEN ... AND ...
Qual desses dois índices é melhor? E porque?