Je trouve quelle est la meilleure façon d'estimer la taille d'un tableau pour cela j'ai étudié beaucoup de blogs et de forums mais je n'ai pas trouvé de réponse précise
Par exemple, nous avons un tableau City avec le moteur InnoDB , disons à l'avenir (au cours de la prochaine année), il y aura 1 million d'enregistrements, alors quelle sera la taille estimée des données et la taille de l'indice de ce tableau pendant cette période.
mysql> desc City;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.03 sec)
MISE À JOUR
Quelle sera la limite supérieure estimée (taille maximale du tableau) avec 1 million d'enregistrements et comment pouvons-nous l'estimer.
Réponses:
Compte tenu de la description du tableau, je vois
Pour un million de lignes, cela représenterait 77 000 000 octets (73,43 Mo)
Quant à la mesure de la table, pour une table donnée mydb.mytable, vous pouvez exécuter cette requête
Pour mesurer toutes les tables regroupées par base de données et moteur de stockage
Exécutez ces requêtes et vous pouvez suivre les modifications de l'utilisation du disque de la base de données / du moteur.
Essaie !!!
la source
CHAR
longueurs doivent être multipliées par 3 si vous en avezCHARSET utf8
. L'ensemble des frais généraux peut être estimé en doublant ou en triplant le calcul.ALTER TABLE ... ENGINE=InnoDB;
) pour obtenir un rapport précis. L'effort n'en vaut peut-être pas la peine.Si vous utilisez des tables InnoDB, vous pouvez obtenir la taille des données / index individuels à partir de
mysql.innodb_index_stats
. La statistique «taille» contient la réponse, en pages, vous devez donc la multiplier par la taille de la page, qui est 16 Ko par défaut .L'index PRIMARY est les données elles-mêmes.
la source
en exécutant cette requête, vous pouvez obtenir la taille utilisée pour
Data
etIndex
d'une table, vous pouvez vérifier cette taille par rapport au nombre de lignes et prévoir 1 million de lignesla source
Si vous ne disposez pas encore de données, voici quelques conseils. Ce qui suit s'applique à InnoDB. (MyISAM est beaucoup plus simple et plus petit.)
Ne pas utiliser
CHAR
pour les colonnes de longueur variable. Qu'utilisezCHARACTER SET
-vous? Ascii a besoin d'un octet par caractère; utf8mb4 a besoin de 1 à 4.Total = environ 80 octets.
Multipliez le 80 par entre 2 et 3 pour tenir compte des différents frais généraux. La table de lignes 1 Mo sera probablement comprise entre 160 Mo et 240 Mo.
Pour mesurer un seul index, par exemple
CountryCode
de 3 octets:Remarques:
Seuls les nœuds feuilles (de BTrees) doivent être calculés; la surcharge pour les nœuds non-feuilles est généralement de 1%.
Le
PRIMARY KEY
est "regroupé" avec les données, il n'est donc pas nécessaire de le calculer.Si vous n'avez pas de PK explicite, vous devez ajouter 6 octets à la taille de ligne pour autoriser le PK fabriqué.
ROW_FORMAT = COMPRESSED
vous donne un rétrécissement de 2: 1. (Ce n'est pas aussi bon qu'un taux de compression zip (etc.) typique de 3: 1.)SHOW TABLE STATUS LIKE "tablename";
est le moyen rapide de calculer la taille «réelle». VoirData_length
pour les données et PK;Index_length
pour les index secondaires etData_free
pour d'autres éléments.Il est rare
Index_length
de dépasserData_length
. Cependant, ce n'est pas "faux" que cela se produise.la source
C'est fastidieux. Mais les détails sont dans les documents .
Pour être aussi précis que possible, ce qui est rarement nécessaire, vous devrez également lire la structure de la table et la structure de l'index.
Si j'étais à votre place, je construirais le tableau, le remplirais avec un million de lignes de données de test et mesurerais le changement de taille. Selon votre application, vous devrez peut-être également prendre en compte la taille des fichiers journaux des transactions.
la source