Musíte mít složený index na (public, date)
Tímto způsobem MySQL
bude filtrovat na public
a seřadit podle date
.
Z vašeho EXPLAIN
Vidím, že na (public, date)
nemáte složený index .
Místo toho máte dva různé indexy na public
a v date
. Alespoň tak se jmenují IDX_PUBLIC
a DATE
řekni.
Aktualizace:
Jste public
sloupec není BIT
, je to BINARY(1)
. Je to typ postavy a používá porovnávání znaků.
Při porovnávání celých čísel se znaky MySQL
převede druhé na první, nikoli naopak.
Tyto dotazy vracejí různé výsledky:
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
Buď změňte public
sloupec být bit
nebo přepište svůj dotaz takto:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, i. E. porovnávejte znaky se znaky, nikoli s celými čísly.