Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando filesort para classificar por coluna de data e hora no MySQL


Você precisa ter um índice composto em (public, date)

Desta forma, MySQL filtrará em public e classifique em date .

Do seu EXPLAIN Vejo que você não tem um índice composto em (public, date) .

Em vez disso, você tem dois índices diferentes em public e em date . Pelo menos, é o que seus nomes IDX_PUBLIC e DATE dizer.

Atualização:

Você public coluna não é um BIT , é um BINARY(1) . É um tipo de caractere e usa comparação de caracteres.

Ao comparar inteiros com caracteres, MySQL converte o último no primeiro, e não vice-versa.

Essas consultas retornam resultados diferentes:
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

Altere seu public coluna para ser um bit ou reescreva sua consulta assim:
SELECT  c.*
FROM    Cars c
WHERE   c.PUBLIC = '1'
ORDER BY 
        DATE DESC

, eu. e. compare caracteres com caracteres, não inteiros.