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 - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
SQL - Commande SELECT VoirLe 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 - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...

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