Bonjour,
voilà je ne sais pas trop si yen a qui pourront m'aider mais j'ai un petit soucis.
Voilà, je fais de l'optimisation de Transac SQL en utilisant le showplan.
J'ai une procédure stockée que j'exécute une première fois. Quand je regarde mon showplan, j'ai plus de 5 millions d' I/O pour mon dernier select (le select final sélectionne une date qu'il renvoie en output) et je met alors plusieurs minutes à avoir ma valeur de sortie. Il utilise alors un index qui n'a rien a voir avec la DT_CHERCHE
Jusq'ici tout va bien.
Je regarde alors les index existant et y en a un sur la table qui m'intéresse qui commence par les colonnes ID_BIDULE, DT_CHERCHE, AUTRE_COLONNE1, ...
Je crée donc un nouvel index avec juste les colonnes DT_CHERCHE et ID_BIDULE (dans cette ordre)
Je réexécute ma procédure stockée et la: je met moins d'une minute a avoir mon résultat et mon dernier SELECTfais a peine 5000 I/O (les autres select de la proc ont alors également très fortement baissé)
Jusq'ici tout va bien
Je drop alors mon index "miracle" et je réexécute la proc, c la que je suis perdu:
Mon dernier SELECT fait environ 5500 I/O mais je met à peine une quinzaine de secondes a avoir mon résultat, (les autres select de la proc eux ont réaugmentés de quelques millers d'I/O) le tout en utilisant désormais l'Index sur les DT_CHERCHE qui existait déjà!!!!
Pourquoi la proc n'utilise-t-elle donc pas automatiquement cette index???
Pourquoi, avec bcp moins d'I/O mon index est-il plus lent à me donner le résultat??
(pour info je ne pense pas que les la mémoire cache joue, j'ai pris mes précautions..)
Merci de m'aider
++