SQL - Select

Fermé
Sébastien - 26 mai 2004 à 10:57
 Sébastien - 26 mai 2004 à 11:00
Bonjour à tous,

J'ai une question à propos du temps d'execution d'un requete SQL.

Voici une description en simplifié de ma table ( TH_CODE_TABLES ) sur la quelle je fais mon select.

Cette table à la clé Primaire mise sur 2 champs (CODE_TABLE_NAME, CODE) --> PK_TH_CODE_TABLES

Voici mon select :

Select
DESC_FR,
DESC_NL
From TH_CODE_TABLES
Where
CODE_TABLE_NAME = 'ZZ079' And
CODE = '08'


Normallement, la requete doit se faire en utilisant l'index et donc très rapidement. Mais j'ai remarqué que souvent avec de petites tables, un full select est réailisé au lieu d'utiliser l'index. Ce qui me fait environ 2 à 3 seconde alors que si il utilise l'index il le fait instantanément.

C'est très génant car ce select est éxecuter 5 fois dans un autre select qui lui contient environ 600000 records... Faite le compte, quand je suis arrivé au travail ce matin ca tournait toujours d'hier.

Maintenant nous avons trouvé la parade en rajoutant un HINT à la requete qui va forcer l'utilisation de l'index :

Select /*--+ INDEX(TH_CODE_TABLES PK_TH_CODE_TABLES) */
DESC_FR,
DESC_NL
From TH_CODE_TABLES
Where
CODE_TABLE_NAME = 'ZZ079' And
CODE = '08'


Et la donc je n'ai plus de problèmes... Mais ceci dit j'aimerais savoir pourquoi des fois il utilise l'index ( --> Logique ) alors que d'autre fois ( et souvent avec de petites tables) il fauit un full analyzed et me sort donc le resultat beaucoup trop lentement.

Sébastien.

1 réponse

Je corrige la requete avec le HINTS (j'ai enlevé les commentaires)

Select --+ INDEX(TH_CODE_TABLES PK_TH_CODE_TABLES)
DESC_FR,
DESC_NL
From TH_CODE_TABLES
Where
CODE_TABLE_NAME = 'ZZ079'
And
CODE = '08'
1