Bonjour à tous,
J'ai testé deux requêtes qui donnent le même résultat et j'ai été pas mal surpris du résultat obtenu !
Voici les requêtes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT SCHEMA.CLIENT.LIEU AS LIEU , SCHEMA.CLIENT.IDENT AS ID , (SELECT SCHEMA.INFO.LABEL FROM SCHEMA.INFO WHERE SCHEMA.INFO.IDENT = SCHEMA.CLIENT.IDENT ) AS LABEL FROM SCHEMA.CLIENTEt voici le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT SCHEMA.CLIENT.LIEU AS LIEU , SCHEMA.CLIENT.IDENT AS ID , SCHEMA.INFO.LABEL AS LABEL FROM SCHEMA.INFO LEFT JOIN SCHEMA.INFO ON SCHEMA.INFO.IDENT = SCHEMA.CLIENT.IDENT
Je suis assez étonné car la première requête effectue une requête supplémentaire par enregistrement... La deuxième traite je suppose plus de données étant donné la jointure, mais de là à avoir un résultat 3x plus lent...
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Premier Query PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------- Plan hash value: 4037814144 ----------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 496K| 6307K| 337 (3)| 00:00:05 | | 1 | TABLE ACCESS BY INDEX ROWID| INFO | 1 | 10 | 3 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | SYS_C0041052 | 1 | | 2 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL | CLIENT | 496K| 6307K| 337 (3)| 00:00:05 | ----------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("INFO"."IDENT"=:B1) Second Query PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------ Plan hash value: 1523841922 ------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 496K| 10M| | 1376 (2)| 00:00:17 | |* 1 | HASH JOIN RIGHT OUTER| | 496K| 10M| 6152K| 1376 (2)| 00:00:17 | | 2 | TABLE ACCESS FULL | INFO | 286K| 2795K| | 142 (3)| 00:00:02 | | 3 | TABLE ACCESS FULL | CLIENT | 496K| 6307K| | 337 (3)| 00:00:05 | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("INFO"."IDENT"(+)="CLIENT"."IDENT")
La deuxième requête me semblait plus propre..
Qu'en pensez-vous ?
Merci d'avance
Partager