sql >> Databasteknik >  >> RDS >> Mysql

bindestreck i MySQL ordning efter klausul

Svaret finns i frågan:

Nyckelordet här är "uttryck" . Du kan använda uttryck i ORDER BY klausul.

ORDER BY -order_line_groups.sequence DESC

är ett aritmetiskt uttryck och "bindestrecket" är inte ett bindestreck utan ett minus; en unär minus matematisk operator.

Hur fungerar det?

Angående resultatet så fungerar det som förväntat:

  • Om kolumntypen order_line_groups.sequence är en numerisk typ eller en datum- och tidstyp (de lagras internt som siffror också) då vänder minus ordningen på de returnerade raderna. Klausulen är likvärdig med

      ORDER BY order_line_groups.sequence ASC
    
  • Om kolumntypen är en strängtyp sedan försöker MySQL att konvertera värdena av kolumnen till siffror (eftersom subtraktionen är en aritmetisk operation och den är inte definierad för strängar). När MySQL konverterar strängar till siffror stannar det på det första tecknet som inte är en siffra. Beroende på vilken data du lagrar i kolumnen order_line_groups.sequence , kommer mer eller mindre av dess strängvärden att konverteras till nummer 0 .

Angående hastigheten, som förklaras på dokumentationssidan som tillhandahålls i frågan MySQL kan inte använda index för att lösa ORDER BY . Detta gör frågan långsam.

Slutsats

Använder ORDER BY -order_line_groups.sequence gör frågan långsam. Mer, det ger inte ett bra sätt att sortera resultatuppsättningen när typen av kolumn sequence är en strängtyp.



  1. Hur kan jag få kolumnnamn från en tabell i Oracle?

  2. Hur kan du gruppera efter i intervall i SQL?

  3. BULK INSERT problem i MySQL

  4. Frågeoptimering i PostgreSQL. FÖRKLARA Grunderna – Del 2