Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di filesort per ordinare in base alla colonna datetime in MySQL

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.