Bonjour à tous,

J'ai créé 3 schémas différents sous PostgreSQL et trois bases différentes sous Oracle et MySQL qui correspondent aux schémas de PostgreSQL. Pour comparer les performances des SGBDR, j'applique à ces bases 6 requêtes différentes que je vous donne ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Select nomdossier From Dossier Where id_dossier = 12500;
Select nomdossier From Dossier Where nomdossier like 'PC%';
Select count(distinct nomdossier) From Dossier Where nomdossier like 'PC%';
Select count(distinct nomdossier) From Dossier D, Modele M Where D.id_modele = M.id_modele And M.codeADS = 'PC';
Select count(*) From 
( Select d.id_dossier, nomdossier
From Dossier D, DossierEtat DE
Where D.id_dossier = DE.id_dossier (+)
And (DE.id_etat = 2 or DE.id_etat is null));
Select distinct D.Id_dossier, DE1.DateLimiteLegale  , DE1.DateLimitePrevue  , DE1.DateEffective  , DE2.DateLimiteLegale  , DE2.DateLimitePrevue  , DE2.DateEffective  , DE3.DateLimiteLegale  , DE3.DateLimitePrevue  , DE3.DateEffective  , DE4.DateLimiteLegale  , DE4.DateLimitePrevue  , DE4.DateEffective  
From Dossier D  , DossierEtat DE1 , DossierEtat DE2 , DossierEtat DE3 , DossierEtat DE4 
Where D.id_dossier in 
	(  Select distinct DE.id_dossier from DossierEtat DE,  Dossier VLD where DE.id_dossier = VLD.id_dossier  and VLD.CodeADS = 'PC' And id_etat = 1 
	and DateEffective between to_date('01/12/2002','DD/MM/YYYY')  and to_date('01/01/2003','DD/MM/YYYY')  
And DE.id_dossier in  
	(Select DE.id_dossier from dossieretat DE where id_etat = 30 and DateEffective between to_date('01/12/2002','DD/MM/YYYY')  
	and to_date('01/01/2003','DD/MM/YYYY')  
and DE.id_dossier not in  
	(select id_dossier from dossieretat where id_etat = 150 and DateEffective is not null)  
and DE.id_dossier not in  
	(select id_dossier from dossieretat where id_etat = 152 and DateEffective is not null) ) )   
And D.Id_Dossier = DE1.Id_Dossier (+)  And DE1.id_etat (+) = 1 And D.Id_Dossier = DE2.Id_Dossier (+)  
And DE2.id_etat (+) = 30 And D.Id_Dossier = DE3.Id_Dossier (+)  And DE3.id_etat (+) = 150 
And D.Id_Dossier = DE4.Id_Dossier (+)  And DE4.id_etat (+) = 152 Order By DE1.DateEffective;
Je sais que la dernière est imbuvable... J'ai adapté les requêtes en fonction du SGBDR que j'utilisait et il n'y a pas d'erreur de syntaxe. J'exécute ces requêtes avec un nombre et une taille de données équivalentes pour chacune des bases (ou schémas) bien entendu. Et je trouve les résultats suivants:
Pour la petite base (110 Mo de données):
Oracle: 15ms 16ms 15ms 15ms 31ms 31ms
Postgre: 16ms 16ms 31ms 31ms 31ms 31ms
Mysql: 16ms 02ms 05ms 03 ms
Comme les deux dernières requêtes sont des requêtes imbriquées, elles ne sont pas prises en compte par MySQL.
Pour la moyenne base (2Go de données):
Oracle: 15 ms 16 ms 47 ms 140 ms 500 ms 859 ms
Postgre: 15ms 265ms 125ms 141ms 1391ms 1072ms
MySQL: 03 ms 30 ms 20 ms 22 ms
Pour la plus grosse base (8 Go de données):
Oracle: 15 ms 16 ms 700 ms 1 s 2 s 4 s
Postgre: 16ms 1735ms 750ms 0.92s 4.34s 14s
MySQL: 06 ms 1.20s 6.89s 7.41s
Et là, on voit bien que MySQL est plus performant qu'Oracle sur la petite et la moyenne base alors cela m'étonne beaucoup et je voulais savoir si c'était normalou si il y a quelque chose (un facteur par exemple) que j'ai négligé.

J'attends vos réponses à ce sujet. Peut-être que quelqu'un a pu trouver des résultats similaires.
Merci d'avance
champijulie.