sql >> Base de Datos >  >> RDS >> Mysql

Usando filesort para ordenar por columna de fecha y hora en MySQL

Debe tener un índice compuesto en (public, date)

De esta forma, MySQL filtrará en public y ordenar en date .

Desde su EXPLAIN Veo que no tiene un índice compuesto en (public, date) .

En su lugar, tiene dos índices diferentes en public y el date . Al menos, así se llaman IDX_PUBLIC y DATE decir.

Actualización:

public la columna no es un BIT , es un BINARY(1) . Es un tipo de carácter y utiliza la comparación de caracteres.

Al comparar números enteros con caracteres, MySQL convierte el último al primero, no al revés.

Estas consultas devuelven 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

O cambia tu public columna para ser un bit o reescriba su consulta así:

SELECT  c.*
FROM    Cars c
WHERE   c.PUBLIC = '1'
ORDER BY 
        DATE DESC

, i. mi. compare caracteres con caracteres, no con números enteros.