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 03/03/2008, 15h28   #1
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Par défaut [Oracle8i] Utilisation d'index difficile à comprendre

Bonjour,

J'ai une requete très simple :

Code :
1
2
3
SELECT champs1, champs2, champs3 
FROM TABLE
WHERE champs1 IN ('A','B') AND champs1 <> 'C'
Je possède un index1 sur champs1 et un index2 sur (champs2, champs1) dans cet ordre.

En exécutant la requête comme cela, Oracle me fait un table access full.
Si je modifie la requete en supprimant champs3 du select, Oracle utilise l'index sur (champs2, champs1).

Question :
- Quelle(s) pourrai(en)t être la ou les raisons de la non utilisation de l'index1 dans le premier cas ?
- Idem dans le second cas, pourquoi utilise-t-il index2 qui début par un champs non présent dans la clause where ?

Pour information, la table possède d'autres champs ainsi que d'autres indexs ne commençant ni par champs1 ni par champs2.
De plus ce problème ne se produit pas sur mon environnement de dev qui lui ne possède que les index1 et 2.

Edit> J'ai supprimé les indexs autres que le 1 et 2 sur la base ou j'ai le problème, et ce dernier persiste.

Merci d'avance.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 15h45   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Drizzt [Drone38] Voir le message
- Quelle(s) pourrai(en)t être la ou les raisons de la non utilisation de l'index1 dans le premier cas ?
le champs1 <> 'C' doit poser problème, peut-être trop de lignes ramenées.

Citation:
Envoyé par Drizzt [Drone38] Voir le message
- Idem dans le second cas, pourquoi utilise-t-il index2 qui début par un champs non présent dans la clause where ?
parce que l'index contient toutes les colonnes utilisées dans la requête et permet ainsi d'économiser une TABLE ACCESS
Quitte à faire un accés disque autant taper dans l'index directement plutôt que faire un FTS.

Imaginons que la requête retourne 80% des lignes de la table. Dans le 1° cas, il faut faire un accés à la table pour récupérer champs3 mais comme on récupère bcp de données l'usage de l'index n'est pas intéressant. Dans le 2° cas, plus besoin d'aller dans la table donc autant utiliser l'index, même s'il n'est pas super intéressant, il l'est forcément plus qu'un FULL sur la table
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 15h59   #3
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Ok je comprends mieux !

Merci
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web