U moet een samengestelde index hebben op (public, date)
Op deze manier MySQL
zal filteren op public
en sorteer op date
.
Van uw EXPLAIN
Ik zie dat je geen samengestelde index hebt op (public, date)
.
In plaats daarvan heb je twee verschillende indexen op public
en op date
. Tenminste, dat is wat hun namen IDX_PUBLIC
en DATE
vertel.
Bijwerken:
Jij public
kolom is geen BIT
, het is een BINARY(1)
. Het is een karaktertype en gebruikt karaktervergelijking.
Bij het vergelijken van gehele getallen met tekens, MySQL
converteert de laatste naar de eerste, niet omgekeerd.
Deze zoekopdrachten leveren verschillende resultaten op:
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
Wijzig uw public
kolom moet een bit
zijn of herschrijf uw zoekopdracht als volgt:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, i. e. vergelijk karakters met karakters, geen gehele getallen.