Debe tener un índice compuesto en (public, date)
De esta forma, MySQL
filtrará en public
y ordenar en date
.
Desde su EXPLAIN
Veo que no tiene un índice compuesto en (public, date)
.
En su lugar, tiene dos índices diferentes en public
y el date
. Al menos, así se llaman IDX_PUBLIC
y DATE
decir.
Actualización:
Tú public
la columna no es un BIT
, es un BINARY(1)
. Es un tipo de carácter y utiliza la comparación de caracteres.
Al comparar números enteros con caracteres, MySQL
convierte el último al primero, no al revés.
Estas consultas devuelven 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
O cambia tu public
columna para ser un bit
o reescriba su consulta así:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, i. mi. compare caracteres con caracteres, no con números enteros.