Salut ici,
J'ai une table de 1 million de lignes (appelons-la "MaTable") qui contient un champs de type VARCHAR de longueur 280 ("MonChamps"). Ce champs contient une liste de mots clefs et a environ 900K valeurs distinctes. La table a aussi un index simple basé sur ce champs uniquement.
Ce que j'aimerais faire, c'est pour un texte donné (de la taille d'une courte phrase "MaPhrase") retourner toutes les lignes de MaTable où une valeur de MonChamps est trouvée dans MaPhrase.
Alors comme je suis un gros noobje fais comme ça :
Ça marche - mais c'est pas très rapide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM MaTable WHERE INSTR('MaPhrase', MonChamps) > 0;
Après un coup d'œil sur ce sympathique tutoriel http://jpg.developpez.com/oracle/tuning/ , j'ai creusé un peu et remarqué que mon index n'est pas utilisé.
À priori la fonction INSTR est le problème, et j'imagine que c'est pareil si j'utilise LIKE. Comme je suis sur Orcale 10G je n'ai pas accès non plus à l'index de type "text" (et de toute façon je ne sais pas si ça aiderait, vu que je ne cherche pas un texte à l'intérieur des valeurs de mon champs, mais l'inverse).
Voilà, ça a l'air tout simple mais je cale.
Quelqu'un a-t-il une idée ?
Partager