Sebenarnya Anda tidak dapat mengoptimalkan kueri tersebut.
Anda mengurutkan hasil menggunakan nilai terhitung, sehingga Anda tidak dapat menggunakan indeks. Jika Anda menggunakan explain
Anda bisa melihat bagaimana kueri Anda dieksekusi, dan using temporary
akan hadir di extra
kolom, yang berarti bahwa semua data dari kueri Anda disimpan di tabel sementara tempat pemesanan dilakukan.
Tidak masalah jika Anda hanya menginginkan 50 kecocokan pertama dalam kueri, itu harus terlebih dahulu mendapatkan semua data, membuangnya ke tabel sementara, mengurutkan hasilnya di tabel itu dan kemudian mengembalikan kepada Anda 50 kecocokan pertama.
Seperti yang Anda duga, ini adalah operasi yang memakan waktu dan memori.
Jadi pilihan terbaik Anda adalah menempatkan indeks di tabel untuk mendapatkan semua baris yang Anda butuhkan secepat mungkin dan kemudian memprosesnya dengan php
untuk mendapatkan data yang Anda butuhkan.
Omong-omong, lihat panduan pengoptimalan MySQL .