Devi avere un indice composito su (public, date)
In questo modo, MySQL
filtrerà su public
e ordina per date
.
Dal tuo EXPLAIN
Vedo che non hai un indice composito su (public, date)
.
Invece hai due diversi indici su public
e il date
. Almeno, questo è il loro nome IDX_PUBLIC
e DATE
dillo.
Aggiornamento:
Tu public
la colonna non è un BIT
, è un BINARY(1)
. È un tipo di carattere e utilizza il confronto dei caratteri.
Quando si confrontano interi con caratteri, MySQL
converte il secondo nel primo, non viceversa.
Queste query restituiscono risultati diversi:
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 il tuo public
colonna deve essere un bit
oppure riscrivi la tua richiesta come segue:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, io. e. confronta i caratteri con i caratteri, non con i numeri interi.