Bonjour à tous,

je débarque sous Oracle (pas facile ) et tente de passer une appli de firebird ) à Oracle 10g, en commençant mes tests, je fais direct une syncope en voyant le temps requis pour une requête toute bête sur de petites tables ...

J'ai certainement fait une erreur grosse comme un éléphant quelque part, voici donc la structure des mes deux tables, ainsi que la requête incriminée :

Temps d'exécution : entre 0.35s et 0.60s en local sur le serveur via Sql developer.

Table E_Examens (27500 lignes)
PrimaryKey integer (number(*,0) sur E_EXAMENS.IDEXAMEN
index integer (number(*,0) sur E_EXAMENS.IDPATIENT
index Asc timestamp(0) sur E_EXAMENS.DateExamen
ForeignKey (Cascade) sur p_patients.idpatient

Table P_Patients (20000 lignes)
PrimaryKey integer (number(*,0) sur P_PATIENTS.IDPATIENT
index varchar2(32 char) sur P_PATIENTS.Nom

Requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT p.Nom, e.DATEEXAMEN
FROM E_EXAMENS e
INNER JOIN P_PATIENTS p on p.idpatient = e.idpatient
ORDER By e.DateExamen Asc
Plan :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
"Optimizer"	"Cost"	"Cardinality"	"Bytes"	"Partition Start"	"Partition Stop"	"Partition Id"	"ACCESS PREDICATES"	"FILTER PREDICATES"
"SELECT STATEMENT"	"ALL_ROWS"	"1123"	"26471"	"2673571"	""	""	""	""	""
"SORT(ORDER BY)"	""	"1123"	"26471"	"2673571"	""	""	""	""	""
"HASH JOIN"	""	"507"	"26471"	"2673571"	""	""	""	""P"."IDPATIENT"="E"."IDPATIENT""	""
"TABLE ACCESS(FULL) MEDIREPORT.E_EXAMENS"	""	"249"	"26470"	"582340"	""	""	""	""	""
"TABLE ACCESS(FULL) MEDIREPORT.P_PATIENTS"	""	"97"	"22341"	"1764939"	""	""	""	""	""
Pourquoi le plan ne tient t'il point compte de mes index ?

Merci bcp à tout ceux qui prendront le temps de se poser la question

Souch