2010-10-07 16 views
1

IHello,requête pour compter le nombre exact d'enregistrements dans toutes les tables

J'essaie de nombre pour chaque table dans ma base de données MySQL combien enregistrements il y a en elle.

Tous mes tableaux se trouvent être dans InnoDB et cette requête

SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'myschema'; 

est manière beaucoup trop d'une estimation (Il y a +846 dossiers et il me dit qu'il n'y a que + - 400)

Existe-t-il un moyen de compter plus nombre exact de lignes avec une requête similaire? Peu importe combien de temps dure la requête. (PS ne pas utiliser php ou un langage similaire)

Répondre

1

Si la longueur de la requête n'a pas d'importance alors qu'en procédant comme suit pour chaque table dans votre base de données:

select Count(*) from MyTable 
0

Si votre allez utiliser Dans les vues système, vous devez vous assurer que les statistiques de votre base de données sont mises à jour ou que le nombre de lignes risque d'être incorrect dans les vues du schéma système, telles que le fichier information_schema.x.

Utilisez le

select count(*) yourtable; 

comme indiqué dans la réponse ci-dessus pour obtenir le nombre exact

Analyze table yourtable; 

mettre à jour les statisitcs puis vérifier le nombre dans la vue du système, ils doivent correspondre au point ths pour Nombre de rangées.

voir ce site pour plus de détails et une façon de le faire pour votre base de données:

MySQL reference manual

0

Comme écrit dans ce Answer

create table #rowcount (tablename varchar(128), rowcnt int) 
exec sp_MSforeachtable 
    'insert into #rowcount select ''?'', count(*) from ?' 
select * from #rowcount 
    order by tablename 
drop table #rowcount