Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden von filesort zum Sortieren nach datetime-Spalte in MySQL

Sie benötigen einen zusammengesetzten Index für (public, date)

Auf diese Weise MySQL filtert nach public und nach date sortieren .

Aus Ihrem EXPLAIN Wie ich sehe, haben Sie keinen zusammengesetzten Index für (public, date) .

Stattdessen haben Sie zwei verschiedene Indizes auf public und am date . So lauten zumindest ihre Namen IDX_PUBLIC und DATE sagen.

Aktualisierung:

Sie public Spalte ist kein BIT , es ist ein BINARY(1) . Es ist ein Zeichentyp und verwendet Zeichenvergleiche.

Beim Vergleich von Ganzzahlen mit Zeichen, MySQL wandelt letzteres in ersteres um, nicht umgekehrt.

Diese Abfragen geben unterschiedliche Ergebnisse zurück:

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

Ändern Sie entweder Ihren public Spalte ein bit sein oder schreiben Sie Ihre Abfrage wie folgt um:

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

, ich. e. Vergleichen Sie Zeichen mit Zeichen, nicht mit ganzen Zahlen.