Sisihan dalam Kiraan Baris antara "count()" dan "explain selected *""
Arahan "explain selected *" dalam MySQL memberikan anggaran baris yang diproses semasa pertanyaan, bagaimanapun, anggaran ini boleh berbeza daripada kiraan baris sebenar yang diperoleh menggunakan fungsi "count()".
Penjelasan
Pernyataan "explain selected *" memaparkan maklumat tentang cara MySQL melaksanakan pertanyaan Antara butiran yang disediakan ialah anggaran bilangan baris yang akan diimbas oleh pertanyaan ini berdasarkan statistik yang diselenggara oleh MySQL tentang jadual yang disoal.
Walau bagaimanapun, statistik ini mungkin tidak sentiasa tepat Faktor seperti pengedaran data, struktur jadual dan konteks pertanyaan boleh mempengaruhi ketepatan anggaran Akibatnya, kiraan baris "terangkan *" mungkin tidak sepadan dengan kiraan baris sebenar yang diproses oleh pertanyaan.
Contoh
Pertimbangkan contoh berikut:
mysql> select count(*) from table where relation_title='xxxxxxxxx'; +----------+ | count(*) | +----------+ | 1291958 | +----------+ mysql> explain select * from table where relation_title='xxxxxxxxx'; +----+-------------+---------+- | id | select_type | rows | +----+-------------+---------+- | 1 | SIMPLE | 1274785 | +----+-------------+---------+-
Seperti yang diperhatikan, "terangkan dipilih *" kenyataan menganggarkan bahawa 1,274,785 baris akan diimbas untuk mendapatkan semula data. Walau bagaimanapun, fungsi "count()" mengembalikan kiraan sebenar 1,291,958 baris.
Implikasi
Percanggahan antara kiraan baris boleh mengelirukan pengguna untuk mempercayai bahawa indeks sedang digunakan untuk mengoptimumkan pertanyaan. Walau bagaimanapun, ini mungkin tidak berlaku dan pertanyaan masih boleh mengimbas sejumlah besar baris.
Kesimpulan
Sementara "terangkan * yang dipilih" menyediakan maklumat berharga mengenai pelaksanaan pertanyaan, ia tidak boleh dipercayai sebagai ukuran tepat bagi kiraan baris sebenar yang diproses oleh pertanyaan. Fungsi "count()" harus digunakan untuk mendapatkan kiraan tepat bagi baris yang sepadan.
Atas ialah kandungan terperinci Mengapa 'terangkan *' Kiraan Baris yang dipilih Berbeza daripada 'bilangan()'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!