Vous n'êtes pas identifié(e).

#1 26/06/2020 10:27:36

Juju
Membre

Comparaison taille table/colonne INTEGER ET VARCHAR

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

#2 26/06/2020 11:16:57

Marc Cousin
Membre

Re : Comparaison taille table/colonne INTEGER ET VARCHAR

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

#3 26/06/2020 12:58:59

Juju
Membre

Re : Comparaison taille table/colonne INTEGER ET VARCHAR

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 smile
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

#4 29/06/2020 07:55:57

Juju
Membre

Re : Comparaison taille table/colonne INTEGER ET VARCHAR

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

Pied de page des forums