65 votes

La manière la plus efficace d'obtenir le nombre de lignes de tableau

Actuellement, j'ai une base de données avec plus de 6 millions de lignes et qui continue de croître. Je fais actuellement SELECT COUNT(id) FROM table; pour afficher le nombre à mes utilisateurs, mais la base de données devient volumineuse et je n'ai pas besoin de conserver toutes ces lignes sauf pour pouvoir afficher le nombre. Existe-t-il un moyen de sélectionner la valeur auto-incrémentée à afficher afin que je puisse effacer la plupart des lignes de la base de données? L'utilisation de LAST_INSERT_ID() ne semble pas fonctionner.

88voto

thinkswan Points 3185

Suivant est la façon la plus performante de trouver la prochaine valeur AUTO_INCREMENT pour une table. C'est rapide même sur les bases de données contenant des millions de tables, car cela ne nécessite pas d'interroger la base de données information_schema potentiellement volumineuse.

mysql> SHOW TABLE STATUS LIKE 'nom_table';
// Recherchez la colonne Auto_increment

Cependant, si vous devez récupérer cette valeur dans une requête, alors vous devez accéder à la base de données information_schema.

SELECT `AUTO_INCREMENT`
FROM   INFORMATION_SCHEMA.TABLES
WHERE  TABLE_SCHEMA = 'NomDeLaBase'
AND    TABLE_NAME   = 'NomDeLaTable';

59voto

James Skidmore Points 13628

Si c'est seulement pour obtenir le nombre d'enregistrements (lignes), je suggérerais d'utiliser :

SELECT TABLE_ROWS
FROM information_schema.tables 
WHERE table_name='the_table_you_want' -- Peut se terminer ici s'il n'y a qu'une seule base de données
  AND table_schema = DATABASE();      -- Voir le commentaire ci-dessous s'il y a plus d'1 base de données

(au moins pour MySQL) à la place.

29voto

Essayer ceci

Exécuter ce SQL:

SHOW TABLE STATUS LIKE ''

et récupérer la valeur du champ Auto_increment

17voto

doitlikejustin Points 3747

Je ne suis pas sûr pourquoi personne n'a suggéré ce qui suit. Cela permettra d'obtenir la valeur auto_increment en utilisant uniquement SQL (pas besoin d'utiliser mysql_fetch_array de PHP) :

SÉLECTIONNER AUTO_INCREMENT DE information_schema.tables OÙ TABLE_NAME = 'table'

2voto

Pankaj Khairnar Points 1551

Si vous obtenez directement le numéro maximal en écrivant une requête select, il y a peut-être une chance que votre requête donne une valeur incorrecte. par exemple, si votre table a 5 enregistrements, l'ID d'incrémentation sera 6 et si je supprime l'enregistrement numéro 5, votre table aura 4 enregistrements avec un ID maximal de 4, dans ce cas, vous obtiendrez 5 comme prochain ID d'incrémentation. au lieu de cela, vous pouvez obtenir des informations à partir de la définition mysql elle-même. en écrivant le code suivant en PHP

" . $qShowStatus);

$row = mysql_fetch_assoc($qShowStatusResult);
$next_increment = $row['Auto_increment'];

echo "prochain numéro d'incrémentation: [$next_increment]";
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X