Apakah ini lebih cepat ketika saya menggunakan nama kolom yang diindeks daripada *? Seperti ini: PILIH COUNT (id) FROMtablename
1
Hanya sedikit. Saya mendapat tabel baris 21961904 yang COUNT nya tanyakan dalam 115 detik, saat menggunakan ID butuh 107 detik.
Bondolin
2
COUNT (*) adalah definisi bahasa yang ketat. Anda akan mendapatkan kesalahan parse jika Anda mencoba COUNT (*) perhatikan spasi
ppostma1
9
Anda bisa melakukannya COUNT(1), ini akan menjadi cara tercepat.
Shota Papiashvili
Apa cara terbaik untuk menggunakan COUNT () untuk menulis variabel dalam PHP? Apakah saya melakukan "... COUNT (*) AS rowCount ..." dalam SQL, apakah ia menggunakan $ results-> num_rows, atau adakah cara untuk memanggil hasil ini secara langsung?
Nosajimiki
71
Karena tidak ada yang menyebutkannya:
show table status;
daftar semua tabel bersama dengan beberapa informasi tambahan, termasuk perkiraan baris untuk setiap tabel. Inilah yang digunakan phpMyAdmin untuk halaman basis datanya.
Informasi ini tersedia di MySQL 4, mungkin di MySQL 3,23 terlalu lama basis data skema informasi.
MEMPERBARUI:
Karena ada suara turun, saya ingin mengklarifikasi bahwa jumlah yang ditampilkan diperkirakan untuk InnoDB dan TokuDB dan itu benar untuk mesin penyimpanan MyISAM dan Aria (Maria).
Jumlah baris. Beberapa mesin penyimpanan, seperti MyISAM, menyimpan jumlah yang tepat. Untuk mesin penyimpanan lain, seperti InnoDB, nilai ini merupakan perkiraan, dan dapat bervariasi dari nilai aktual sebanyak 40% hingga 50%. Dalam kasus tersebut, gunakan SELECT COUNT (*) untuk mendapatkan penghitungan yang akurat.
Ini juga merupakan cara tercepat untuk melihat jumlah baris pada MySQL, karena permintaan seperti:
select count(*)fromtable;
Melakukan pemindaian tabel penuh apa yang bisa menjadi operasi yang sangat mahal yang mungkin memakan waktu berjam-jam di server besar beban tinggi. Ini juga meningkatkan disk I / O.
Operasi yang sama mungkin memblokir tabel untuk memasukkan dan memperbarui - ini hanya terjadi pada mesin penyimpanan eksotis.
InnoDB dan TokuDB OK dengan kunci meja, tetapi perlu pemindaian tabel lengkap.
Ini sepertinya cara paling efisien untuk menghitung baris. Saya bertanya-tanya mengapa itu bukan jawabannya? Saya menggunakan InnoDB. Dengan kunci meja, jumlah baris harus tepat, bukan?
Chung Lun Yuen
untuk innodb diperkirakan . tetapi Anda dapat menggunakannya dalam beberapa kasus "Situs web kami memiliki anggota xxx", "Kami mendeteksi hasil xxx yang serupa dengan Anda" dan seterusnya.
Nick
Saya tidak yakin. tetapi untuk Innodb tidak masuk hitungan nyata. Tetapi cukup berguna untuk jutaan tabel baris.
Nick
4
Pergi melalui tabel untuk menghitung setiap baris untuk mendapatkan jumlah baris agak konyol. Jadi saya lebih suka jawaban ini juga.
th3penguinwhisperer
35
Kami memiliki cara lain untuk mengetahui jumlah baris dalam tabel tanpa menjalankan selectkueri pada tabel itu.
Setiap instance MySQL memiliki basis data information_schema. Jika Anda menjalankan kueri berikut, itu akan memberikan detail lengkap tentang tabel termasuk perkiraan jumlah baris dalam tabel itu.
select*from information_schema.TABLES where table_name ='table_name'\G
Jika Anda memiliki beberapa bidang dalam tabel Anda dan meja Anda besar, lebih baik JANGAN GUNAKAN* karena memuat semua bidang ke memori dan menggunakan yang berikut ini akan memiliki kinerja yang lebih baik
Ini mungkin mengembalikan perkiraan jumlah baris. Dalam satu contoh, saya mendapat 55.940.343 baris menggunakan COUNT (*) tetapi 56.163.339 menggunakan metode ini jadi tidak aktif lebih dari 200k.
jcoffland
@ jcoffland, saya menyebutkan jawaban oleh _ Santosh_ di atas yang menyatakan hasilnya adalah perkiraan . Jawaban saya adalah pertanyaan praktis yang lebih rinci. Jawabannya cukup jelas jika Anda ingin menggunakan penghitungan yang tepat count(*)dengan kesadaran kinerja
Mohammad Kanan
1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;$total =0;$sqls = mysql_query($sql,$conn);if($sqls ){$total = mysql_result($sqls,0);};
echo "Total:".$total;`
tablename
COUNT(1)
, ini akan menjadi cara tercepat.Karena tidak ada yang menyebutkannya:
daftar semua tabel bersama dengan beberapa informasi tambahan, termasuk perkiraan baris untuk setiap tabel. Inilah yang digunakan phpMyAdmin untuk halaman basis datanya.
Informasi ini tersedia di MySQL 4, mungkin di MySQL 3,23 terlalu lama basis data skema informasi.
MEMPERBARUI:
Karena ada suara turun, saya ingin mengklarifikasi bahwa jumlah yang ditampilkan diperkirakan untuk InnoDB dan TokuDB dan itu benar untuk mesin penyimpanan MyISAM dan Aria (Maria).
Per dokumentasi :
Ini juga merupakan cara tercepat untuk melihat jumlah baris pada MySQL, karena permintaan seperti:
Melakukan pemindaian tabel penuh apa yang bisa menjadi operasi yang sangat mahal yang mungkin memakan waktu berjam-jam di server besar beban tinggi. Ini juga meningkatkan disk I / O.
Operasi yang sama mungkin memblokir tabel untuk memasukkan dan memperbarui - ini hanya terjadi pada mesin penyimpanan eksotis.
InnoDB dan TokuDB OK dengan kunci meja, tetapi perlu pemindaian tabel lengkap.
sumber
Kami memiliki cara lain untuk mengetahui jumlah baris dalam tabel tanpa menjalankan
select
kueri pada tabel itu.Setiap instance MySQL memiliki basis data information_schema. Jika Anda menjalankan kueri berikut, itu akan memberikan detail lengkap tentang tabel termasuk perkiraan jumlah baris dalam tabel itu.
sumber
Secara sederhana:
sumber
sumber
Lakukan saja
Anda dapat menentukan kondisi dengan Di mana setelah itu
sumber
Jika Anda memiliki beberapa bidang dalam tabel Anda dan meja Anda besar, lebih baik JANGAN GUNAKAN
*
karena memuat semua bidang ke memori dan menggunakan yang berikut ini akan memiliki kinerja yang lebih baiksumber
Seperti yang disebutkan oleh Santosh , saya pikir permintaan ini cukup cepat, sementara tidak menanyakan semua tabel.
Untuk mengembalikan hasil bilangan bulat dari jumlah rekaman data, untuk tablename tertentu dalam database tertentu :
sumber
count(*)
dengan kesadaran kinerjasumber
Anda harus menggunakan count () mengembalikan jumlah baris yang cocok dengan kriteria yang ditentukan
sumber
Jika Anda memiliki kunci utama atau kunci / indeks unik, metode yang lebih cepat mungkin (Diuji dengan 4 juta tabel baris)
dan kemudian mendapatkan bidang kardinalitas (hampir instan)
Waktu di mana dari 0,4 hingga 0,0001 ms
sumber