Bonjour,
je vous présente les données de ma question:
une table toute bête avec par exemple 2 colonnes: col1 et col2
la table comporte x rows et pour 1% des lignes col1 = Y
et 99% des lignes col1 = N
on met un index classique, donc dans notre cas de mauvaise sélectivité, sur col1.
Et on requête avec une clause where sur col1 avec une variable liée(col1=:var)
Vous m'arrêtez si je dis des bêtises mais dans ces conditions l'optimizer va sûrement préférer un full plutôt que prendre l'index (pour :var =Y ou N). Donc lorsque :var=Y on peut difficilement avoir un plan plus merdique.
Maintenant On rajoute un histogramme sur col1, tout à fait indiqué dans mon cas.
En admettant que la requete soit en memoire et que son plan actuel soit un full scan, si je fais ma query col1=:var avec :var=Y
QUE VA T'IL SE PASSER?
Le sql va t'il etre reparsé? le plan va t'il changé? si le sql n'est jamais dechargé de la memoire, le plan du full sera toujours choisit?
Merci pour votre aide
Partager