Jawabannya ada di pertanyaan:
Kata kuncinya di sini adalah "ekspresi" . Anda dapat menggunakan ekspresi di ORDER BY
klausa.
ORDER BY -order_line_groups.sequence DESC
adalah ekspresi aritmatika dan "tanda hubung" bukan tanda hubung tetapi minus; operator matematika unary dikurangi.
Bagaimana cara kerjanya?
Mengenai hasilnya, ini berfungsi seperti yang diharapkan:
-
Jika tipe kolom
order_line_groups.sequence
adalah tipe numerik atau jenis tanggal &waktu (mereka juga disimpan secara internal sebagai angka) kemudian minus membalikkan urutan baris yang dikembalikan. Klausa tersebut setara denganORDER BY order_line_groups.sequence ASC
-
Jika tipe kolom adalah tipe string kemudian MySQL mencoba untuk mengonversi nilai dari kolom ke angka (karena pengurangan adalah operasi aritmatika dan tidak didefinisikan untuk string). Ketika MySQL mengonversi string menjadi angka, ia berhenti pada karakter pertama yang bukan digit. Tergantung pada data yang Anda simpan di kolom
order_line_groups.sequence
, kurang lebih nilai stringnya akan dikonversi ke angka0
.
Mengenai kecepatan, seperti yang dijelaskan di halaman dokumentasi yang disediakan dalam pertanyaan MySQL tidak dapat menggunakan indeks untuk menyelesaikan ORDER BY
. Ini membuat kueri menjadi lambat.
Kesimpulan
Menggunakan ORDER BY -order_line_groups.sequence
membuat kueri menjadi lambat. Lebih lanjut, itu tidak memberikan cara yang baik untuk mengurutkan hasil yang ditetapkan ketika jenis kolom sequence
adalah tipe string.