sql >> Databasteknik >  >> RDS >> Mysql

Använder filsortering för att sortera efter kolumn datum och tid i MySQL

Du måste ha ett sammansatt index på (public, date)

På detta sätt, MySQL kommer att filtrera på public och sortera på date .

Från din EXPLAIN Jag ser att du inte har ett sammansatt index på (public, date) .

Istället har du två olika index på public och på date . Åtminstone är det vad de heter IDX_PUBLIC och DATE berätta.

Uppdatering:

Du public kolumnen är inte en BIT , det är en BINARY(1) . Det är en teckentyp och använder teckenjämförelse.

När du jämför heltal med tecken, MySQL konverterar det senare till det förra, inte tvärtom.

Dessa frågor ger olika resultat:

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

Ändra antingen din public kolumn vara en bit eller skriv om din fråga så här:

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

, jag. e. jämför tecken med tecken, inte heltal.



  1. Få antalet poster som påverkas av INSERT eller UPPDATERING i PostgreSQL

  2. Datetime NU PHP mysql (+ PDO-variant)

  3. Välj efter månad i ett fält

  4. Importera Excel-data till PostgreSQL 9.3