Setelah sedikit menggali, saya dapat mengkonfirmasi kedua skenario Anda:
MySQL 5.1 menerapkan ORDER BY di dalam subkueri.
MariaDB 5.5.39 di Linux tidak terapkan ORDER BY di dalam subquery ketika tidak ada LIMIT disediakan. Itu memang namun terapkan perintah dengan benar ketika LIMIT yang sesuai diberikan:
SELECT t2.Code
FROM (
SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;
Tanpa LIMIT , tidak ada alasan bagus untuk menerapkan pengurutan di dalam subquery. Ini dapat diterapkan secara setara ke kueri luar.
Perilaku yang terdokumentasi:
Ternyata, MariaDB telah mendokumentasikan perilaku ini dan itu tidak dianggap sebagai bug:
Sebuah "tabel" (dan subquery di
FROMklausa juga) adalah - menurut standar SQL - kumpulan baris yang tidak berurutan. Baris dalam tabel (atau dalam subquery diFROMklausa) tidak datang dalam urutan tertentu. Itu sebabnya pengoptimal dapat mengabaikanORDER BYklausa yang telah Anda tentukan. Faktanya, standar SQL bahkan tidak mengizinkanORDER BYklausa untuk muncul di subquery ini (kami mengizinkannya, karenaORDER BY ... LIMIT... mengubah hasil, kumpulan baris, bukan hanya urutannya).Anda perlu memperlakukan subquery di
FROMklausa, sebagai satu set baris dalam beberapa urutan yang tidak ditentukan dan tidak ditentukan, dan letakkanORDER BYdiSELECTtingkat atas .
Jadi MariaDB juga merekomendasikan untuk menerapkan ORDER BY di kueri terluar, atau LIMIT jika perlu.
Catatan:Saat ini saya tidak memiliki akses ke MySQL 5.5 atau 5.6 yang tepat untuk mengonfirmasi apakah perilakunya sama di sana (dan SQLFiddle.com tidak berfungsi). Komentar tentang laporan bug asli (ditutup sebagai bukan-bug) menunjukkan bahwa MySQL 5.6 mungkin berperilaku dengan cara yang sama seperti MariaDB.