|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() |
Salut,
Soit la table suivante : Code :
Merci edit : je précise qu'elles sont "conventionnelles" c'est à dire de type where A = B |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Non, ça veut dire qu'Oracle a décidé de ne pas aller lire l'index suivant les paramètres de l'optimiseur.
1/ Les stats sont elles à jour ? 2/ La table est elle grosse (parce que sinon c'est plus simple de monter toute la table en mémoire) 3...
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Il faut ajouter quelques détails.
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
ah bien vu, je créé à la volée la table et l'index donc aucune stat n'est à jour.
Cependant je sais à tout moment le compte de la table, puis-je forcer le compilateur à une cardinalité donnée ? il me semble avoir vu passer une syntaxe avec "(cardinalité)" ... |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Je n'ai pas compris ta notion de cardinalité.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() |
et bien puisque l'optimiseur n'a pas de statistiques au moment des requêtes, ne pourrais-je pas les lui spécifier ? (contenu de la table à l'instant t)
/*+ CARDINALITY (100) */ par exemple ... Il faut que je bosse mon pl/sql >< edit : je suis sous 9i !!! |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Je n'ai pas calculé les statistique dans mon exemple et l'index est utilisé (la tables est vide).
Peut tu mieux expliquer quel est ton problème ? Sinon il y a un hint SQL concernant la cardinalité mais est-ce que t'a vraiment besoin ? |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
un exemple de requête ça pourrait être pas mal déjà... est-ce qu'il y une clause WHERE sur la colonne de la PK au moins ?
|
|
|
00
|
|
|
#9 | ||||
|
Membre Expert
![]() |
ce qu'il y a c'est que j'aurais bien une requête complète à vous fournir mais elle est un peu nébuleuse sortie de son contexte quoi ...
La voilà, avec la jointure en gras : Code :
Code :
|
||||
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
bah voila, il y a tellement peut de ligne que ça sert à rien de faire un accès par l'index.
Faut pas croire que FTS = perf catastrophique, c'est un peu plus fin que ça |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() |
la table est remplie dans une transaction et peut contenir plusieurs millions d'enregistrements.
tu veux dire que dans ce dernier cas, l'index serait utilisé ? |
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
J'aimerai bien avoir un desc de la table Table1 pour analyser le type de données de la colonne id.
|
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
si la requête ne ramène pas un trop gros échantillon et que les stats sont à jour, oui
|
|
|
00
|
|
|
#14 | |
|
Membre Expert
![]() |
Citation:
ids.instanceid : VARCHAR2(44) est-ce que au passage vous voyez des abérations dans mon code ? Je suis pas hyper doué en pl/sql et ça m'étonnerait pas que j'ai fait une énormité |
|
|
|
00
|
|
|
#15 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Sinon calcule les statistiques, examine le plan, charge les tables avec un test réel, recalcule les statistiques et examine le plan. Pour l’instant ce qui se passe est normal. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com