Odpověď je v otázce:
Zde je klíčové slovo "výraz" . Můžete použít výrazy v ORDER BY
doložka.
ORDER BY -order_line_groups.sequence DESC
je aritmetický výraz a "pomlčka" není pomlčka, ale mínus; unární mínus matematický operátor.
Jak to funguje?
Pokud jde o výsledek, funguje podle očekávání:
-
Pokud je typ sloupce
order_line_groups.sequence
je číselný typ nebo typ data a času (jsou také interně uloženy jako čísla), potom mínus obrátí pořadí vrácených řádků. Klauzule je ekvivalentní sORDER BY order_line_groups.sequence ASC
-
Pokud je typ sloupce typ řetězce poté se MySQL pokusí převést hodnoty sloupce na čísla (protože odčítání je aritmetická operace a není definována pro řetězce). Když MySQL převádí řetězce na čísla, zastaví se na prvním znaku, který není číslicí. V závislosti na datech, která ukládáte do sloupce
order_line_groups.sequence
, více či méně jeho řetězcových hodnot se převede na číslo0
.
Pokud jde o rychlost, jak je vysvětleno na stránce dokumentace uvedené v otázce MySQL nemůže použít indexy k vyřešení ORDER BY
. Tím se dotaz zpomalí.
Závěr
Pomocí ORDER BY -order_line_groups.sequence
zpomaluje dotaz. Navíc to neposkytuje dobrý způsob, jak třídit sadu výsledků, když je typ sloupce sequence
je typ řetězce.