(Menjelaskan hilangnya ORDER BY
)
Standar SQL pada dasarnya mengatakan bahwa subquery adalah kumpulan baris yang tidak berurutan. Ini menyiratkan bahwa Pengoptimal bebas mengabaikan ORDER BY
dalam tabel 'turunan':FROM ( SELECT ... ORDER BY )
. Dalam versi MySQL dan MariaDB "terbaru", seperti ORDER BYs
sedang dijatuhkan. Ada kasus lain di mana ORDER BY
diabaikan.
Dalam beberapa situasi (tidak yakin tentang yang satu ini), menambahkan LIMIT 99999999
(angka besar) setelah ORDER BY
menipu Pengoptimal untuk melakukan ORDER BY
. Namun, masih bebas untuk mengabaikan "pesanan" nanti.
Aturan umum untuk MySQL:Hindari subquery. (Ada kasus di mana subkueri lebih cepat, tetapi bukan milik Anda.)
Aturan yang kuat:Anda harus memiliki ORDER BY
paling luar jika Anda ingin hasilnya diurutkan.
Jika Anda telah menambahkan LIMIT 3
ke tabel turunan dalam kueri pertama Anda, Anda hanya akan mendapatkan CHARLES, DAVID, JAMES, tetapi tidak harus dalam urutan itu . Artinya, Anda memerlukan dua ORDER BYs
- satu di tabel turunan, satu di bagian paling akhir.