Du måste ha ett sammansatt index på (public, date)
På detta sätt, MySQL kommer att filtrera på public och sortera på date .
Från din EXPLAIN Jag ser att du inte har ett sammansatt index på (public, date) .
Istället har du två olika index på public och på date . Åtminstone är det vad de heter IDX_PUBLIC och DATE berätta.
Uppdatering:
Du public kolumnen är inte en BIT , det är en BINARY(1) . Det är en teckentyp och använder teckenjämförelse.
När du jämför heltal med tecken, MySQL konverterar det senare till det förra, inte tvärtom.
Dessa frågor ger olika resultat:
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
Ändra antingen din public kolumn vara en bit eller skriv om din fråga så här:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, jag. e. jämför tecken med tecken, inte heltal.