Ketika Anda COUNT(*)
mengambil indeks kolom hitung, jadi itu akan menjadi hasil terbaik. Mysql dengan mesin MyISAM sebenarnya menyimpan jumlah baris, tidak menghitung semua baris setiap kali Anda mencoba menghitung semua baris. (berdasarkan kolom kunci utama)
Menggunakan PHP untuk menghitung baris tidak terlalu pintar, karena Anda harus mengirim data dari mysql ke php. Mengapa melakukannya ketika Anda dapat mencapai hal yang sama di sisi mysql?
Jika COUNT(*)
lambat, Anda harus menjalankan EXPLAIN
kueri, dan memeriksa apakah indeks benar-benar digunakan, dan di mana mereka harus ditambahkan.
Berikut ini bukan cara tercepat , tetapi ada kasus, di mana COUNT(*)
tidak benar-benar cocok - ketika Anda mulai mengelompokkan hasil, Anda dapat mengalami masalah, di mana COUNT
tidak benar-benar menghitung semua baris.
Solusinya adalah SQL_CALC_FOUND_ROWS
. Ini biasanya digunakan saat Anda memilih baris tetapi masih perlu mengetahui jumlah baris total (misalnya, untuk paging). Saat Anda memilih baris data, cukup tambahkan SQL_CALC_FOUND_ROWS
kata kunci setelah PILIH:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Setelah Anda memilih baris yang dibutuhkan, Anda bisa mendapatkan hitungan dengan kueri tunggal ini:
SELECT FOUND_ROWS();
FOUND_ROWS()
harus dipanggil segera setelah kueri pemilihan data.
Kesimpulannya, semuanya sebenarnya tergantung pada berapa banyak entri yang Anda miliki dan apa yang ada di pernyataan WHERE. Anda harus benar-benar memperhatikan bagaimana indeks digunakan, ketika ada banyak baris (puluhan ribu, jutaan, dan lebih tinggi).
SELECT 1
dan tidakSELECT *
. Apakah ada bedanya?