Отговорът е във въпроса:
Ключовата дума тук е "израз" . Можете да използвате изрази в ORDER BY
клауза.
ORDER BY -order_line_groups.sequence DESC
е аритметичен израз и "тире" не е тире, а минус; унарен минус математически оператор.
Как работи?
По отношение на резултата, той работи както се очаква:
-
Ако типът на колоната
order_line_groups.sequence
е числов тип или тип дата и час (те също се съхраняват вътрешно като числа), след което минусът обръща реда на върнатите редове. Клаузата е еквивалентна наORDER BY order_line_groups.sequence ASC
-
Ако типът на колоната е тип низ след това MySQL се опитва да преобразува стойностите от колоната към числа (тъй като изваждането е аритметична операция и не е дефинирано за низове). Когато MySQL преобразува низове в числа, той спира на първия знак, който не е цифра. В зависимост от данните, които съхранявате в колона
order_line_groups.sequence
, повече или по-малко от стойностите на низовете му ще се преобразуват в число0
.
По отношение на скоростта, както е обяснено в страницата с документация, предоставена във въпроса, MySQL не може да използва индекси за разрешаване на ORDER BY
. Това прави заявката бавна.
Заключение
Използване на ORDER BY -order_line_groups.sequence
прави заявката бавна. Нещо повече, той не предоставя добър начин за сортиране на набора от резултати, когато типът на колоната sequence
е тип низ.