Você precisa ter um índice composto em
(public, date) Desta forma,
MySQL filtrará em public e classifique em date . Do seu
EXPLAIN Vejo que você não tem um índice composto em (public, date) . Em vez disso, você tem dois índices diferentes em
public e em date . Pelo menos, é o que seus nomes IDX_PUBLIC e DATE dizer. Atualização:
Você
public coluna não é um BIT , é um BINARY(1) . É um tipo de caractere e usa comparação de caracteres. Ao comparar inteiros com caracteres,
MySQL converte o último no primeiro, e não vice-versa. Essas consultas retornam resultados diferentes:
CREATE TABLE t_binary (val BINARY(2) NOT NULL);
INSERT
INTO t_binary
VALUES
(1),
(2),
(3),
(10);
SELECT *
FROM t_binary
WHERE val <= 10;
---
1
2
3
10
SELECT *
FROM t_binary
WHERE val <= '10';
---
1
10
Altere seu
public coluna para ser um bit ou reescreva sua consulta assim:SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, eu. e. compare caracteres com caracteres, não inteiros.