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.

1voto

maniclorn Points 333

SELECT id FROM table ORDER BY id DESC LIMIT 1 peut renvoyer l'ID max et non l'ID auto-incrémenté. Les deux sont différents dans certaines conditions

1voto

Sateesh D Points 11

Si vous n'avez pas le privilège pour "Afficher l'état" alors, la meilleure option est de créer deux déclencheurs et une nouvelle table qui garde le compte des lignes de votre table de milliards d'enregistrements.

Exemple :

TableA >> Milliards d'enregistrements
TableB >> 1 Colonne et 1 Ligne

Chaque fois qu'il y a une requête d'insertion sur TableA (Déclencheur d'insertion), incrémentez la valeur de ligne de 1 dans TableB
Chaque fois qu'il y a une requête de suppression sur TableA (Déclencheur de suppression), décrémentez la valeur de ligne de 1 dans TableB

0voto

Evert Points 17625

A côté de la suggestion information_schema, ceci :

SELECT id FROM table ORDER BY id DESC LIMIT 1

devrait également être très rapide, à condition qu'il y ait un index sur le champ id (ce qui doit être le cas avec auto_increment)

0voto

23Pstars Points 35
$next_id = mysql_fetch_assoc(mysql_query("SELECT MAX(id) FROM table"));
$next_id['MAX(id)']; // prochain id auto incrémenté

j'espère que cela vous sera utile :)

0voto

Contrôleur

SomeNameModel::_getNextID($this->$table)

MODÈLE

class SomeNameModel extends CI_Model{

private static $db;

function __construct(){
  parent::__construct();
  self::$db-> &get_instance()->db;
}

function _getNextID($table){
  return self::$db->query("SHOW TABLE STATUS LIKE '".$table."' ")->row()->Auto_increment;
}

... autre code

}

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