Bonjour,
J'utilise les trois tables suivantes dans ma base de données Oracle 10G.

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
25
26
create table USER
(
    USER_ID 		    NUMBER(10) not null,
    FIRST_NAME                 	    VARCHAR(50),
    LAST_NAME                 	    VARCHAR(50),
    primary key (USER_ID)
);
 
 
 
create table TASK
(
    TASK_ID 		    NUMBER(10) not null,
    TASK_NAME                 	    VARCHAR(50),
    primary key (TASK_ID)
);
 
 
 
 
create table TASK_USER
(
    USER_ID 		    NUMBER(10),
    TASK_ID 		    NUMBER(10),
    EXPIRY_DATE 	    DATE
);
Un utilisateur peut effectuer plusieurs taches. Une tache peut être réalisées par plusieurs utilisateurs. Je souhaite optimiser la requête qui renvoie les taches d'un utilisateur donné.

Il y a actuellement un 1 million de lignes dans la table TASK, 100 mille ligne dans la table USER, et 1,2 million de ligne dans la table TASK_USER.
Lorsqu'un utilisateur n'est plus affecté à une tache donnée, au lieu de supprimer physiquement la ligne, je remplis une date de suppression, d'où la colonne EXPIRY_DATE.




Ma requête est la suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select TASK_ID, TASK_NAME from TASK_USER, TASK where TASK_USER.USER_ID = ? and TASK_USER.EXPIRY_DATE is null and TASK_USER.TASK_ID = TASK.TASK_ID;
Quels index dois-je créer pour optimiser ma requête ?

Merci pour votre aide