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

Bruger filsortering til at sortere efter dato og klokkeslæt kolonne i MySQL

Du skal have et sammensat indeks på (public, date)

På denne måde MySQL vil filtrere på public og sorter på date .

Fra din EXPLAIN Jeg kan se, at du ikke har et sammensat indeks på (public, date) .

I stedet har du to forskellige indekser på public og på date . Det er i hvert fald hvad deres navne IDX_PUBLIC og DATE fortæl.

Opdatering:

Du public kolonne er ikke en BIT , det er en BINARY(1) . Det er en tegntype og bruger tegnsammenligning.

Når man sammenligner heltal med tegn, MySQL konverterer sidstnævnte til førstnævnte, ikke omvendt.

Disse forespørgsler returnerer forskellige resultater:

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

Skift enten din public kolonne til at være en bit eller omskriv din forespørgsel som dette:

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

, dvs. e. sammenligne tegn med tegn, ikke heltal.



  1. Integrer Firebase med PHP til realtidskommunikation

  2. PL/SQL Tutorial:Alt du behøver at vide om PL/SQL

  3. Brug af Laravel Raw Query med pladsholder

  4. Hvordan kan jeg kun vælge det første særskilte match fra et felt i MySQL?