Rechercher : dans
Par :

SQL - Select

Dernière réponse le 26 mai 2004 à 11:00:34 Sébastien, le 26 mai 2004 à 10:57:12 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « SQL Select » dans :
SQL - Commande SELECT Voir Le langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
SQL - Opérations ensemblistes VoirLes opérations ensemblistes Les opérations ensemblistes en SQL, sont celles définies dans l'algèbre relationnelle. Elles sont réalisées grâce aux opérateurs : UNION INTERSECT (ne fait pas partie de la norme SQL et n'est donc pas implémenté dans...

1

 Sébastien, le 26 mai 2004 à 11:00:34
  • +1

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'

Répondre à Sébastien