10
votes

PHPMYADMIN - Qu'est-ce qu'un tilde (~) signifie en colonne des rangées?

J'ai récemment mis à niveau une joomla! Installation de 1,5 à 1,7 avec un ensemble de données d'articles de 1,5 à 1,7 et tandis que la méthode de mise à niveau permettait la mise à niveau de la base de données (insérer du contenu à une autre table, fondamentalement), j'ai remarqué que la valeur de colonne a été préfixée avec un tilde (~ ):

Voir l'image

Maintenant, à première vue, je suppose que cela signifie que la valeur est approximative car lorsque je rafraîchis la page, je vois une valeur différente, parfois plus élevée, parfois plus bas. OK, disons que la valeur est approximative, dans ce cas, qu'est-ce qui cause cela? Quelques considérations:

  • OS: Windows 7.
  • Server: Apache 2 avec PHP 5.3 et MySQL 5.1.50-Communauté.

0 commentaires

3 Réponses :


1
votes

Quels sont les types de table? Les tables de myisam stockent une rangée exacte dans leurs métadonnées. Les tables d'InnoDb ne peuvent pas, car le nombre exact des lignes varie en fonction des transactions de «en vol», le nombre montré que celui indiqué est marqué comme une estimation (~ = «environ») au lieu d'un «c'est exactement ce nombre ".


0 commentaires

7
votes

Selon le manuel MySQL sur les restrictions Innodb :

  • Afficher le statut de la table ne donne pas de statistiques précises sur InnoDB Tables, à l'exception de la taille physique réservée par la table. Le nombre de lignes n'est qu'une estimation approximative utilisée dans l'optimisation SQL.

  • innodb ne conserve pas un nombre interne de lignes dans une table car les transactions simultanées pourraient "voir" un nombre différent de lignes en même temps. Pour traiter un SELECT Count (*) de la déclaration T , INNODB doit numériser un index du tableau, qui prend du temps si l'index n'est pas entièrement dans le pool tampon. Si votre table ne change pas souvent, l'utilisation du cache de requête MySQL est une bonne solution. Pour obtenir un compte rapide, vous devez utiliser une table de comptoir que vous créez vous-même et laisser votre application le mettre à jour en fonction des inserts et la supprime. Si un nombre de lignes approximatives est suffisant, Afficher l'état de la table peut être utilisé. Voir la section 13.2.13.1, " Conseils de réglage des performances Innodb ".

    Selon le page pour < Code> Afficher la table Statut , affiché InnoDB RowCounts peut varier d'un nombre réel de 50%.


2 commentaires

Je ne pense pas que ce mot signifie ce que vous pensez que cela signifie.


Je vois, c'est juste une référence.



13
votes

Le nombre de lignes est une approximation utilisée pour l'optimisation de la requête par Innodb. Faire un compte (*) est beaucoup plus inefficace et une idée approximative du nombre de lignes suffit à optimiser le plan de requête. PhpmyAdmin fera une requête «Statut de la table de spectacle» pour obtenir les informations sur la table:

http://dev.mysql.com/doc/refman/5.0 /en/show-table-status.html

Pour d'autres moteurs de stockage, tels que InnoDB, cette valeur est une approximation, et peut varier de la valeur réelle de 40 à 40 à 50%. Dans de tels cas, utilisez Select Count (*) pour obtenir un compte précis.


6 commentaires

Merci Bencoder, donc je vais vérifier s'il est pratique de changer le moteur de stockage. J'apprécie ton aide.


Je vous en prie. Je ne peux pas voir pourquoi c'est nécessaire cependant. Appuyez-vous sur cette sortie de phpmyadmin pour quelque chose? Il serait probablement beaucoup mieux d'écrire une page spécifique qui vous donne la valeur correcte à l'aide du nombre (*)


Ne tirez pas la conclusion incorrecte. Votre configuration n'est pas cassée et il n'est pas nécessaire de changer le moteur de stockage.


Pas vraiment, donc, à l'avenir, je pourrais avoir besoin d'utiliser une recherche complèteText afin de laisser ce type serait une meilleure approche.


Ma suggestion est de convertir la table lorsque vous devez, conformément au Principe Yagni .


Notez que c'est une raison pour laquelle InnoDB le fait, et cela le rend mieux dans d'autres choses.