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.