"J'ai entendu que la création d'index avec PostgreSQL était super lente par rapport à Oracle, est-ce que ça gêne ?"
Réponse :
Je n'observe pas de lenteur en ce qui concerne les créations d'index PostgreSQL par rapport à ce que j'observe avec d'autres SGBD, au moins dans les versions récentes.
Pour des raisons légales, je ne peux publier sur le site ou le forum de résultats de benchmark comparant les performances d'Oracle Database et PostgreSQL mais je peux vous fournir des exemples de code à tester par vous-même.
Exemple, code PostgreSQL :
Code : Tout sélectionner
select version();
version
---------------------------------------------------------------------------------------------------------------
PostgreSQL 11.0 (Debian 11.0-1.pgdg+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.2.0-7) 8.2.0, 64-bit
(1 ligne)
create table geants( idg serial, idgu uuid, dtn timestamp, taille smallint, devise varchar(128), dicton varchar(128), berserk boolean);
CREATE TABLE
with recursive serie(i) as
(select 1
UNION ALL
select i + 1 from serie where i < 10000000)
insert into geants(idgu, dtn, taille, devise, dicton, berserk)
select
uuid_generate_v4(),
current_timestamp - (ceil(i/3) || ' minutes')::interval + (trunc(random() * 100 + 1) || ' days')::interval,
200 + (trunc(random() * 200 + 1)),
upper(md5(random()::text)),upper(md5(random()::text)),
case when random() < 0.001 then true else false end
from serie;
INSERT 0 10000000
\dt+ geants
Liste des relations
Schéma | Nom | Type | Propriétaire | Taille | Description
----------+--------+-------+--------------+---------+-------------
postgres | geants | table | postgres | 1281 MB |
(1 ligne)
\timing
Chronométrage activé
create index geants_i1 on geants(devise, dicton);
CREATE INDEX
Durée : ????
\di+
Liste des relations
Schéma | Nom | Type | Propriétaire | Table | Taille | Description
----------+-----------+-------+--------------+--------+--------+-------------
postgres | geants_i1 | index | postgres | geants | 911 MB |
Code : Tout sélectionner
Connecte a :
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
create table geants( idg integer generated by default as identity, idgu raw(16), dtn timestamp, taille smallint, devise varchar(128), dicton varchar(128), berserk number);
Table creee.
insert into geants(idgu, dtn, taille, devise, dicton, berserk)
with serie(i) as
(select 1 from dual
UNION ALL
select i + 1 from serie where i < 10000000)
select
sys_guid(),
current_timestamp - i/1440 + trunc(dbms_random.value * 100 + 1),
200 + (trunc(dbms_random.value * 200 + 1)),
DBMS_RANDOM.string('x',32),DBMS_RANDOM.string('x',32),
case when dbms_random.value < 0.001 then 1 else 0 end
from serie;
10000000 lignes creees.
select segment_name , bytes/1024/1024 from user_segments ;
SEGMENT_NAME BYTES/1024/1024
------------------------------ ---------------
GEANTS 1216
set timi on
create index geants_i1 on geants(devise, dicton);
Index cree.
Ecoule : ?? :?? :??.??
select segment_name , bytes/1024/1024 from user_segments ;
------------------------------ ---------------
GEANTS 1216
GEANTS_I1 848