Tout le monde sait que, dans les tables qui utilisent InnoDB comme moteur, les requêtes comme SELECT COUNT(*) FROM mytable
sont très inexactes et très lentes, surtout lorsque la table s'agrandit et qu'il y a des insertions / suppressions de lignes constantes pendant l'exécution de cette requête.
Si je comprends bien, InnoDB ne stocke pas le nombre de lignes dans une variable interne, ce qui est la raison de ce problème.
Ma question est: pourquoi en est-il ainsi? Serait-il si difficile de stocker de telles informations? C'est une information importante à connaître dans tant de situations. La seule difficulté que je vois si un tel décompte interne serait implémenté est lorsque des transactions sont impliquées: si la transaction n'est pas validée, comptez-vous les lignes insérées par elle ou non?
PS: je ne suis pas un expert des bases de données, je suis juste quelqu'un qui a MySQL comme simple hobby. Donc, si je viens de demander quelque chose de stupide, ne soyez pas excessivement critique: D.
SELECT COUNT(*) FROM ...
requêtes réelles sont précises. Si vous préférez, phpMyAdmin peut être configuré pour toujours utiliser le nombre exact de lignes au détriment de la vitesse. Plus d'infos: stackoverflow.com/questions/11926259/…