Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2011, 16h31   #1
Membre du Club
 
Homme
Inscription : août 2003
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Services de proximité

Informations forums :
Inscription : août 2003
Messages : 79
Points : 54
Points : 54
Par défaut acces by index est-il normal

Bonjour à tous,

Je suis sur Oracle 10g.
J'étudie l'optimiseur sur une simple requête :

Code :
1
2
 
SELECT * FROM client,contrat WHERE nom='X' AND client.numclient=contrat.refclient ;
J'obtiens le plan suivant :
Code :
1
2
3
4
5
6
7
 
Nesteed loops
   TABLE access contrat Full
   TABLE access client BY INDEX rowid
           Nom='X'
           INDEX  Pk_client UNIQUE scan
                  client.numclient=contrat.refclient
Mes tables ne contiennent pas beaucoup de données (au max 5 tuples par table).
Mon client 'X' apparaît 3 fois dans ma table client.
Mes stats sont à jour et le paramètre optimizer_mode est à choose.

Pourquoi l'optimiseur me fait passer par l'index alors qu'il me semblait un full table scan sur de petite table est préférable ?

Je vous remercie par avance pour votre aide.
cordialement
Startout
__________________
Air startout
startout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 17h04   #2
Membre habitué
 
Inscription : juin 2005
Messages : 203
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 203
Points : 117
Points : 117
Salut,

Avec un index, le SGBD évalue le coût d'utilisation des index par rapport à celui de parcours de la table.

Effectivement, en général, sur des petites tables, un index est inutile car moins performant qu'un full scan. Cependant, 2 remarques:
1) Pourquoi mettre en place des mécanismes qui ne sont pas adaptés? Et pourquoi vouloir étudier le fonctionnement de l'optimiser dans des conditions anormales?
2) Au niveau du plan d'exécution, essayez de supprimer l'index, de relancer le plan et de comparer les couts (temps et mémoire). Comparez, et vous verrez qu'il y a peut être une différence.

Dans votre exemple, vu que votre index va servir à scinder la table en 2, je dirais que l'optimiser est pas nécessairement déconnant
Gaadek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 17h19   #3
Membre du Club
 
Homme
Inscription : août 2003
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Services de proximité

Informations forums :
Inscription : août 2003
Messages : 79
Points : 54
Points : 54
Je vous remercie pour votre aide.
Je teste dans des conditions anormales car je n'ai pas de jeux de données.
Les datasets trouvés sur le net et sur ce forum ne me satisfait pas.

Ceci est pour mon rapport de stage. Je dis dans celui-ci que l'optimiseur va privilégier le FTS lorsqu'on dispose de petite table malgré que l'index soit créé.
Mais j'essaye de trouver le plan d'execution qui le démontre sans tricher (suppression des index).

SQL dev me propose uniquement un repère cout.
avec index => 4
sans index => 7

Sans ma clé primaire, il effectue la jointure avec un hash join. Je comprends encore moins. Je croyais que le hash join était intéressant quand les deux tables sont volumineuses.

Je crois que j'ai encore du boulot avant d'être opé sur Oracle...
__________________
Air startout
startout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 09h54   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Bonjour,

Avez-vous calculé vos statistiques avec des histogrammes ?
Combien de lignes avez-vous par blocs de données ?
Les statistiques systèmes ont-elles été calculées ?
Quelles sont les valeurs de Vos paramètres optimizer_index_caching et optimizer_index_cost_adj ?

Tous ces éléments peuvent influer sur le plan d'exécution.
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h52.


 
 
 
 
Partenaires

Hébergement Web