sql >> Database >  >> RDS >> Mysql

koppelteken in MySQL-volgorde per clausule

Het antwoord zit in de vraag:

Het sleutelwoord hier is "expressie" . U kunt uitdrukkingen gebruiken in de ORDER BY clausule.

ORDER BY -order_line_groups.sequence DESC

is een rekenkundige uitdrukking en het "koppelteken" is geen koppelteken maar een minteken; een unaire minus wiskundige operator.

Hoe het werkt?

Wat betreft het resultaat, het werkt zoals verwacht:

  • Als het type kolom order_line_groups.sequence is een numeriek type of een datum- en tijdtype (ze worden ook intern als getallen opgeslagen) dan keert de min de volgorde van de geretourneerde rijen om. De clausule is gelijk aan

      ORDER BY order_line_groups.sequence ASC
    
  • Als het type van de kolom een ​​tekenreekstype vervolgens probeert MySQL om de waarden te converteren van de kolom naar getallen (omdat het aftrekken een rekenkundige bewerking is en niet is gedefinieerd voor tekenreeksen). Wanneer MySQL tekenreeksen naar getallen converteert, stopt het bij het eerste teken dat geen cijfer is. Afhankelijk van de gegevens die u opslaat in kolom order_line_groups.sequence , worden min of meer van de tekenreekswaarden geconverteerd naar het getal 0 .

Wat betreft de snelheid, zoals uitgelegd op de documentatiepagina in de vraag, kan MySQL geen indexen gebruiken om de ORDER BY op te lossen. . Dit maakt de zoekopdracht traag.

Conclusie

Met behulp van ORDER BY -order_line_groups.sequence maakt de query traag. Bovendien biedt het geen goede manier om de resultatenset te sorteren wanneer het type kolom sequence is een tekenreekstype.



  1. MySQL Unicode-letterwoorden

  2. Mysql Chain Select-query

  3. Hoe maak je een back-up van RAC VM's

  4. Vind waarden die geen getallen bevatten in MySQL