J'ai une table de test. La table de test est la suivante:MySQL + MyISAM taille de la table question
CREATE TABLE `mytest` (
`num1` int(10) unsigned NOT NULL,
KEY `key1` (`num1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
J'ai inséré 50 millions de lignes dans cette table. Quand j'indique l'état de la table, l'avg_row_length est 7. Je m'attendais à voir 4 puisque mySQL utilise 4 octets pour les entiers. Est-ce que la clé a un effet sur avg_row_length? Quand je regarde mon fichier .MYD la taille est de 334 Mo ce qui est exactement ce qu'il devrait être donné que le avg_row_length est 7, mais je m'attendais vraiment à voir 190 Mo étant donné que je n'ai qu'un int.
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| mytest | MyISAM | 10 | Fixed | 50000000 | 7 | 350000000 | 1970324836974591 | 600518656 | 0 | NULL | 2010-05-22 09:15:06 | 2010-05-22 19:32:53 | NULL | latin1_swedish_ci | NULL | | |
J'ai inclus la sortie de l'état de la table show pour la table mytest. Désolé pour le formatage: D Merci d'avance!
Alessandro Ferrucci
est-ce que ce byhead à 3 octets reste cohérent sur différentes tailles? Que se passe-t-il si vous n'avez pas de clé? Le meilleur que j'ai pu trouver est: http://forge.mysql.com/wiki/MySQL_Internals_MyISAM bien que je n'ai rien trouvé dans ce qui me semblait être "Il y a toujours un overhead de 3 octets sur les colonnes". – Mike
Ceci est particulier. MyISAM n'ajoutera normalement qu'un en-tête pour les tables contenant des colonnes ou des chaînes NULL-able: l'en-tête indique la longueur totale de la ligne et contient un indicateur de bit pour chaque colonne NULLable. Ni s'appliquent ici - donc je suis surpris. Si vous ajoutez une seconde colonne "int not null", la longueur de la ligne avg passe à 9 octets, c'est-à-dire. un surcoût de 1 octet. – Martin
La réponse est dans la page suivante - la section décrivant l'en-tête d'enregistrement: http://forge.mysql.com/wiki/MySQL_Internals_MyISAM#MyISAM_Record_Structure Un drapeau indique si l'enregistrement a été supprimé. Cela expliquerait un en-tête d'enregistrement à octet unique pour une table sans colonnes NULLable, mais n'expliquerait pas un en-tête de 3 octets. – Martin