(re)Bonjour.
J'ai un souci de performances sur cette requête assez simple:
J'ai des index sur les éléments de comparaison (t1.col2, t2.borneinf et t2.bornesup) qui sont des NUMBER.
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 WITH table1 AS ( SELECT 1 AS col1, 150 AS col2 FROM dual union ALL SELECT 2 AS col1, 250 AS col2 FROM dual union ALL SELECT 3 AS col1, 350 AS col2 FROM dual union ALL SELECT 4 AS col1, 450 AS col2 FROM dual union ALL SELECT 5 AS col1, 550 AS col2 FROM dual union ALL SELECT 6 AS col1, 650 AS col2 FROM dual), table2 AS ( SELECT 1 AS col1, 100 AS borneinf, 199 AS bornesup FROM dual union ALL SELECT 2 AS col1, 200 AS borneinf, 299 AS bornesup FROM dual union ALL SELECT 3 AS col1, 300 AS borneinf, 399 AS bornesup FROM dual union ALL SELECT 4 AS col1, 400 AS borneinf, 499 AS bornesup FROM dual) SELECT t1.*, t2.col4 FROM table1 t1, table2 t2 WHERE t1.col2 >= t2.borneinf AND t1.col2 <= t2.bornesup;
t1 fait 64 000 lignes, et t2 fait 134 000 lignes. L'insertion de ce select dans une table vide prend 2h...... alors que t1 contiendra 900 000 lignes.
L'explain plan est en pièce joint. C'est le MERGE qui coince...
Une précision: dans la table t2, chaque intervalle [borneinf; bornesup] n'est qu'en un seul exemplaire, et les intervalles ne se chevauchent pas. Il faudrait que pour chaque ligne, la comparaison s'arrête dès qu'on en a trouvé un (il peut n'y avoir aucun intervalle).
Merci pour votre aide!![]()
Partager