Vous n'êtes pas identifié(e).
Bonjour à tous,
Je suis sur Postgres v11.6 sous CentOS. Je créé ce sujet parce que je n'arrive pas à trouver l'explication sur la différence entre les tailles de 2 tables. Voici le test :
create table t_i(id integer);
insert into t_i select generate_series(1,500000);
create table t_v(id varchar(22));
with cpt as (select generate_series(0,500000) as i) insert into t_v select UUIDToBase62(replace(uuid_generate_v4()::varchar,'-','')) from cpt;
select count(*) from t_i; -- 500000
select count(*) from t_v; -- 500000
select pg_size_pretty(pg_relation_size('t_i')); -- 17 MB
select pg_size_pretty(pg_relation_size('t_v')); -- 25 MB
select pg_size_pretty(pg_total_relation_size('t_i')); -- 17 MB
select pg_size_pretty(pg_total_relation_size('t_v')); -- 25 MB
select pg_size_pretty(sum(pg_column_size(id))) from t_i; -- 1953 kB
select pg_size_pretty(sum(pg_column_size(id))) from t_v; -- 11 MB
Je m'attendais à ce qu'il y ait une différence plus importante sur la taille des tables, qui serait cohérent avec la différence de taille entre les 2 colonnes id integer et varchar (facteur 6, alors que sur la table on a 50% en plus environ).
Pour info dans la colonne varchar la taille oscille entre 19 et 22 caractères.
Merci !
Julien.
Hors ligne
C'est normal. Il y a des "frais fixes" pour un enregistrement dans les bases de données. On a un entête de bloc de taille fixe, et un entête d'enregistrement, de taille fixe aussi. C'est bien détaillé ici: https://www.postgresql.org/docs/current … ayout.html
L'entête de bloc est souvent négligeable. L'entête d'enregistrement beaucoup moins… c'est 23 octets sous Postgres.
Marc.
Hors ligne
Merci pour votre réponse !
Je vais re-regarder en détail le lien vers la doc, ça ne fera pas de mal de revoir tout ça
Par contre par rapport à ces "frais fixes", en sachant qu'ils sont censés être les mêmes pour les 2 tables, je ne m'explique toujours pas pourquoi la table avec un varchar(22) prend 50% environ de place en plus alors que l'espace pour un varchar(22) est 6 fois plus important que pour un int ?
Julien.
Hors ligne
Bonjour,
Vous pouvez oublier mon dernier message, je me suis embrouillé en calculant par rapport au %age/ratio. Les entêtes expliquent complètement les tailles que j'obtiens et les diffférences entre INT et VARCHAR.
Merci pour votre réponse !
Julien.
Hors ligne