Yanıtlar:
COUNT(1)
, bu en hızlı yol olacak.
Çü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ı.
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.
Bir tablodaki select
sorguyu ç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
basitçe:
SELECT COUNT(*) FROM `tablename`
select count(*) from YourTable
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;
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';
count(*)
Performans farkındalığı ile kesin sayım kullanımı istiyorsanız cevaplar arasında oldukça açık
$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;`
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
tablename