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

bindestreg i MySQL rækkefølge efter klausul

Svaret er i spørgsmålet:

Søgeordet her er "udtryk" . Du kan bruge udtryk i ORDER BY klausul.

ORDER BY -order_line_groups.sequence DESC

er et aritmetisk udtryk og "bindestregen" er ikke en bindestreg, men et minus; en unær minus matematisk operator.

Hvordan virker det?

Med hensyn til resultatet fungerer det som forventet:

  • Hvis typen af ​​kolonne order_line_groups.sequence er en numerisk type eller en dato- og tidstype (de er også internt gemt som tal) så vender minus rækkefølgen af ​​de returnerede rækker. Klausulen svarer til

      ORDER BY order_line_groups.sequence ASC
    
  • Hvis kolonnetypen er en strengtype derefter forsøger MySQL at konvertere værdierne af kolonnen til tal (fordi subtraktionen er en aritmetisk operation, og den er ikke defineret for strenge). Når MySQL konverterer strenge til tal, stopper det på det første tegn, der ikke er et ciffer. Afhængigt af de data, du gemmer i kolonnen order_line_groups.sequence , vil mere eller mindre af dens strengværdier konverteres til nummer 0 .

Med hensyn til hastigheden, som forklaret på dokumentationssiden i spørgsmålet, kan MySQL ikke bruge indekser til at løse ORDER BY . Dette gør forespørgslen langsom.

Konklusion

Brug af ORDER BY -order_line_groups.sequence gør forespørgslen langsom. Mere, det giver ikke en god måde at sortere resultatsættet på, når typen af ​​kolonne sequence er en strengtype.



  1. MySQL pivottabel med dynamiske overskrifter baseret på enkelt kolonne data

  2. Indstil tidsdel af en datetime-variabel

  3. Konstruer dato fra år og ugenummer i MSSQL

  4. FIND_IN_SET med to strenge