sql >> Database >  >> RDS >> Mysql

Filesort gebruiken om te sorteren op datetime-kolom in MySQL

U moet een samengestelde index hebben op (public, date)

Op deze manier MySQL zal filteren op public en sorteer op date .

Van uw EXPLAIN Ik zie dat je geen samengestelde index hebt op (public, date) .

In plaats daarvan heb je twee verschillende indexen op public en op date . Tenminste, dat is wat hun namen IDX_PUBLIC en DATE vertel.

Bijwerken:

Jij public kolom is geen BIT , het is een BINARY(1) . Het is een karaktertype en gebruikt karaktervergelijking.

Bij het vergelijken van gehele getallen met tekens, MySQL converteert de laatste naar de eerste, niet omgekeerd.

Deze zoekopdrachten leveren verschillende resultaten op:

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

Wijzig uw public kolom moet een bit zijn of herschrijf uw zoekopdracht als volgt:

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

, i. e. vergelijk karakters met karakters, geen gehele getallen.



  1. Is het mogelijk om de natuurlijke volgorde van kolommen in Postgres te wijzigen?

  2. Wat is het verschil tussen varchar en nvarchar?

  3. MySQL converteert timediff-uitvoer naar dag, uur, minuut, tweede formaat

  4. SQL Server-prestaties:testen in de cloud