Hitung baris tabel

165

Apa perintah MySQL untuk mengambil jumlah catatan dalam sebuah tabel?

DJ.
sumber

Jawaban:

236
SELECT COUNT(*) FROM fooTable;

akan menghitung jumlah baris dalam tabel.

Lihat manual referensi .

Gregory Pakosz
sumber
7
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).

Per dokumentasi :

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(*) from table;

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.

Nick
sumber
3
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
Santhosh Tangudu
sumber
Apakah ini lebih cepat pada tabel MyISAM karena MyISAM menyimpan jumlah baris?
NaturalBornCamper
Saya tidak pernah menguji ini di MyISAM.
Santhosh Tangudu
6

Secara sederhana:

SELECT COUNT(*) FROM `tablename`
David Snabel-Caunt
sumber
5
select count(*) from YourTable
Adriaan Stander
sumber
3

Lakukan saja

SELECT COUNT(*) FROM table;

Anda dapat menentukan kondisi dengan Di mana setelah itu

SELECT COUNT(*) FROM table WHERE eye_color='brown';
Suanbit
sumber
3

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

SELECT COUNT(1) FROM fooTable;
Yuseferi
sumber
Ini salah. Lihat stackoverflow.com/questions/5179969/... COUNT (1) mungkin jauh lebih lambat untuk MyISAM.
jcoffland
@ jcoffland Anda dapat mencoba sendiri, terutama ketika Anda telah bergabung atau di mana kondisinya akan jauh lebih cepat daripada hitungan (*).
Yuseferi
2

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 :

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';
Mohammad Kanan
sumber
1
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;`
alpc
sumber
Jawaban ini sudah usang, mysql_result sudah ditinggalkan dalam PHP 5.5.0 dan dihapus dalam PHP 7.0.0
Jadikan dunia ini tempat yang lebih baik
1

Anda harus menggunakan count () mengembalikan jumlah baris yang cocok dengan kriteria yang ditentukan

select count(*) from table_name;
ruam
sumber
0

Jika Anda memiliki kunci utama atau kunci / indeks unik, metode yang lebih cepat mungkin (Diuji dengan 4 juta tabel baris)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

dan kemudian mendapatkan bidang kardinalitas (hampir instan)

Waktu di mana dari 0,4 hingga 0,0001 ms

hamboy75
sumber