Pertanyaan pertama:
Menggunakan count COUNT()
, secara internal server (MySQL) akan memproses permintaan secara berbeda.
Saat melakukan COUNT()
, server(MySQL) hanya akan mengalokasikan memori untuk menyimpan hasil penghitungan.
Saat menggunakan $row=$SQL->rowCount();
server (Apache/PHP) akan memproses seluruh rangkaian hasil, mengalokasikan memori untuk semua hasil tersebut, dan menempatkan server dalam mode pengambilan, yang melibatkan banyak detail berbeda, seperti penguncian.
Perhatikan bahwa PDOStatement::rowCount()
mengembalikan jumlah baris yang dipengaruhi oleh pernyataan terakhir, bukan jumlah baris yang dikembalikan. Jika pernyataan SQL terakhir dieksekusi oleh PDOStatement
terkait adalah SELECT
pernyataan, beberapa database dapat mengembalikan jumlah baris yang dikembalikan oleh pernyataan itu. Namun, perilaku ini tidak dijamin untuk semua database dan tidak boleh diandalkan untuk aplikasi portabel.
Berdasarkan analisis saya, jika Anda menggunakan COUNT()
, prosesnya akan dibagi ke MySQL dan PHP sementara jika Anda menggunakan $row=$SQL->rowCount();
, pemrosesan akan lebih untuk PHP.
Oleh karena itu COUNT()
di MySQL lebih cepat.
Pertanyaan kedua:
COUNT(*)
lebih baik dari COUNT(id)
.
Penjelasan:
count(*)
fungsi di mysql dioptimalkan untuk menemukan jumlah nilai. Menggunakan wildcard berarti tidak mengambil setiap baris. Itu hanya menemukan hitungan. Jadi gunakan count(*)
sedapat mungkin.
Sumber: