Bonjour,

Je fais appel à vous car nous rencontrons un problème actuellement avec une de nos requêtes que voici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SELECT *
  FROM table1, table2
 WHERE (table1.ID = table2.ID)
   AND ((   (UPPER (table1.NAME) LIKE UPPER ('%toto%'))
         OR (UPPER (table1.sname) LIKE UPPER ('%toto%'))
         OR (UPPER (table1.notes) LIKE UPPER ('%toto%'))
         OR (UPPER (table2.champ1) LIKE UPPER ('%toto%'))
         OR (UPPER (table2.champ2) LIKE UPPER ('%toto%'))
        )
       )
table1 compte 3 millions de tuples, table2 450 000.

Le problème de cette requête est qu'elle est de plus en plus utilisée, qu'elle dure plus de 5 mn (encore plus longue depuis passage sous Oracle 10g), et que ça devient carrément insupportable dès que 2 utilisateurs la font simultanément !!

Comment peut-on "bien" écrire ce type de requête ? (je sais que les LIKE et les OR, au niveau optimisation... ).

Merci pour votre aide