Meskipun tidak ada yang namanya "pesanan cepat oleh Rand()", ada solusi untuk tugas spesifik Anda.
Untuk mendapatkan satu baris acak , Anda dapat melakukan seperti yang dilakukan blogger jerman ini:http://web.archive.org/web/20200211210404/http://www.roberthartung.de/mysql-order-by-rand-a- studi kasus-alternatif/ (Saya tidak dapat melihat url hotlink. Jika ada yang melihatnya, silakan edit tautannya.)
Teksnya dalam bahasa Jerman, tetapi kode SQLnya sedikit di bawah halaman dan dalam kotak putih besar, jadi tidak sulit untuk dilihat.
Pada dasarnya apa yang dia lakukan adalah membuat prosedur yang berfungsi untuk mendapatkan baris yang valid. Itu menghasilkan angka acak antara 0 dan max_id, coba ambil satu baris, dan jika tidak ada, teruskan sampai Anda menekan yang ada. Dia mengizinkan pengambilan x jumlah baris acak dengan menyimpannya di tabel sementara, jadi Anda mungkin dapat menulis ulang prosedurnya agar sedikit lebih cepat mengambil hanya satu baris.
Kelemahan dari ini adalah jika Anda menghapus BANYAK baris, dan ada celah yang besar, kemungkinan besar akan kehilangan banyak kali, sehingga tidak efektif.
Pembaruan:Waktu eksekusi berbeda
Ini mungkin ada hubungannya dengan pengindeksan. id
diindeks dan cepat diakses, sedangkan menambahkan username
untuk hasilnya, berarti perlu membacanya dari setiap baris dan meletakkannya di tabel memori. Dengan *
itu juga harus membaca semuanya ke dalam memori, tetapi tidak perlu melompati file data, artinya tidak ada waktu yang terbuang untuk mencari.
Ini membuat perbedaan hanya jika ada kolom panjang variabel (varchar/teks), yang berarti ia harus memeriksa panjangnya, lalu melewati panjang itu, bukan hanya melewatkan panjang yang ditetapkan (atau 0) di antara setiap baris.