Tablo satırlarını say


166

Bir tablodaki kayıt sayısını almak için MySQL komutu nedir?

Yanıtlar:


237
SELECT COUNT(*) FROM fooTable;

tablodaki satır sayısını sayar.

Referans kılavuzuna bakın .


7
* Yerine dizinli sütun adını kullandığım zaman daha hızlı mı? tablename

1
Sadece biraz. Kimliğini kullanırken 107 saniye sürdüğü COUNT tanesinin 115 saniye içinde sorguladığı 21961904 satırlık bir tablo aldım.
Bondolin

2
COUNT (*) katı bir dil tanımıdır. COUNT (*) alanı not etmeyi denerseniz ayrıştırma hatası alırsınız
ppostma1

9
Yapabilirsin COUNT(1), bu en hızlı yol olacak.
Shota Papiashvili

PHP'de bir değişken yazmak için COUNT () yöntemini kullanmanın en iyi yolu nedir? SQL'de "... COUNT (*) AS rowCount ..." yapıyor muyum, $ results-> num_rows kullanıyor mu yoksa bu sonucu doğrudan çağırmanın bir yolu var mı?
Nosajimiki

71

Çünkü kimse bundan bahsetmedi:

show table status;

her tablo için tahmini satırlar da dahil olmak üzere bazı ek bilgilerle birlikte tüm tabloları listeler. PhpMyAdmin'in veritabanı sayfası için kullandığı budur.

Bu bilgiler MySQL 4'te, muhtemelen MySQL 3.23'te de mevcuttur - uzun zaman önce bilgi şeması veri tabanı.

GÜNCELLEME:

Aşağı oylama olduğundan, gösterilen sayının InnoDB ve TokuDB için tahmin edildiğini ve MyISAM ve Aria (Maria) depolama motorları için kesinlikle doğru olduğunu açıklığa kavuşturmak istiyorum .

Başına belgeler :

Satır sayısı. MyISAM gibi bazı depolama motorları tam sayıyı depolar. InnoDB gibi diğer depolama motorları için bu değer yaklaşık bir değerdir ve gerçek değerden% 40 ila% 50'ye kadar değişebilir. Bu gibi durumlarda, doğru bir sayım elde etmek için SAYI SEÇ (*) kullanın.

Bu ayrıca MySQL'de satır sayısını görmenin en hızlı yoludur, çünkü sorgu şöyle:

select count(*) from table;

Tam yüksek taramayı yapmak, yüksek yük sunucusunda saatlerce sürebilecek çok pahalı bir işlem olabilir. Ayrıca disk G / Ç oranını artırır.

Aynı işlem ekler ve güncellemeler için tabloyu engelleyebilir - bu yalnızca egzotik depolama motorlarında gerçekleşir.

InnoDB ve TokuDB tablo kilidi ile sorun yok, ancak tam tablo taraması gerekiyor.


3
Bu, satırları saymanın en etkili yoluna benziyor. Neden cevap olmadığını merak ediyorum. InnoDB kullanıyorum. Masa kilidi ile satır sayısı tam olarak doğru olmalı mı?
Chung Lun Yuen

innodb için tahmin edilmektedir . ancak bazı durumlarda "Web sitemizde xxx üyemiz var", "Sizinkine benzer xxx sonuçlar tespit ettik" vb. kullanabilirsiniz.
Nick

Emin değilim. ama Innodb için gerçek bir sayı değil. Ancak milyon satırlık tablolar için oldukça yararlıdır.
Nick

4
Bir satır sayısı elde etmek için her satırı saymak için tablolara gitmek oldukça saçma. Ben de bu cevabı tercih ediyorum.
th3penguinwhisperer

35

Bir tablodaki selectsorguyu çalıştırmadan tablodaki satır sayısını bulmanın başka bir yolu var .

Her MySQL örneğinde information_schema veritabanı bulunur. Aşağıdaki sorguyu çalıştırırsanız, tablodaki yaklaşık satır sayısı da dahil olmak üzere tablo hakkında tam ayrıntılar verecektir .

select * from information_schema.TABLES where table_name = 'table_name'\G

MyISAM satır sayısını depoladığından bu bir MyISAM tablosunda daha mı hızlı?
NaturalBornCamper

Bunu MyISAM'de hiç test etmedim.
Santhosh Tangudu



3

Sadece bir

SELECT COUNT(*) FROM table;

Bundan sonra bir Where ile koşulları belirleyebilirsiniz

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

3

Tablonuzda birkaç alan varsa ve tablonuz çok büyükse, tüm alanları belleğe yüklemesi ve aşağıdakileri kullanması daha iyi performansa sahip olacağı için KULLANMAYIN * .

SELECT COUNT(1) FROM fooTable;

Bu yanlış. Bkz. Stackoverflow.com/questions/5179969/… COUNT (1) aslında MyISAM için çok daha yavaş olabilir.
jcoffland

@jcoffland, özellikle bir katılımınız olduğunda veya koşulların olduğu durumlarda kendim deneyebilirsiniz (*).
Yuseferi

2

Santosh tarafından belirtildiği gibi , bu sorguyu tüm tablo sorgulamadan uygun, hızlı olduğunu düşünüyorum.

Belirli bir veritabanındaki belirli bir tablename için veri kaydı sayısının tamsayı sonucunu döndürmek için :

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

1
Bu, tahmini sayıda satır döndürebilir. Bir örnekte, COUNT (*) kullanarak 55,940,343 satır aldım, ancak bu yöntemi kullanarak 56,163,339 satır aldım, bu yüzden 200k'dan fazla kapalı kaldı.
jcoffland

@jcoffland, sonucun yaklaşık olduğunu belirten _ Santosh_ tarafından verilen yanıttan bahsettim . Cevabım daha ayrıntılı bir pratik sorgu. count(*)Performans farkındalığı ile kesin sayım kullanımı istiyorsanız cevaplar arasında oldukça açık
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;`

Bu cevap modası geçmiş, mysql_result PHP 5.5.0'da kullanımdan kaldırıldı ve PHP 7.0.0'da kaldırıldı
Bu dünyayı daha iyi bir yer haline

1

Count () öğesini kullanmanız gerekir, belirtilen bir ölçütle eşleşen satır sayısını döndürür

select count(*) from table_name;

0

Birincil anahtarınız veya benzersiz bir anahtarınız / dizininiz varsa, daha hızlı yöntem mümkündür (4 milyon satır tablosuyla test edilmiştir)

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

ve sonra kardinalite alanı olsun (anında yakın)

0.4s - 0.0001ms arası zamanlar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.