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 aanORDER 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 getal0
.
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.