Bonjour à tous.
Tout d'abord, voici ce que j'ai cru comprendre sur les calculs de statistique sur des colonnes :
l'optimiseur oracle, pour calculer la pertinence de l'utilisation de telle ou telle restriction, ou de telle ou telle index, va les utiliser dans un ordre préférenciel de restrictivité (plus plein d'autre criteres). Il va pour cela se baser sur le nombre de valeurs distinctes de la colonne (sur la base de ses calculs de statistique précédent).
Dans le cas d'une colonne à faible cardinalité (par exemple 2 valeur distincte O ou N), il n'utilisera pas la restriction imédiatement, car celle ci ne lui semble pas assez restrictive. Pourtant, dans le cas ou les valeur ne sont pas équilibré (1% de O et 99 de N), il serait pour lui plus avantageux de le faire (si on fait une jointure avec la valeur la plus restrictive évidemment) .
Dans ce cas, on peut par exemple le forcer à utiliser un index sur cette colonne (via un hint), mais on peut aussi lui fournir l'information qui lui manque en lui faisant calculer la répartition effective des donnée dans la colonne par un "analyze MATABLE compute statistics for columns size 2 MACOLONNE".
Si j'ai effectivement bien compris l'utilisation de ces statistiques (mais rien n'est moins sur ), la deuxieme solution me semble -a priori- largement plus séduisante. Nous les avons utilisées dans un ou deux cas, et les gains ont été plus que notable (requete passant de 20 minute à 3 secondes !)
CEPENDANT, notre DBA à tempéré mon optimisme sur cette méthode en me disant qu'à sa connaissance, la généralisation de ces statistiques est à proscrire, et à n'utiliser qu'en solution de dépanage temporaire en attendant les corrections applicatives, et qu'il est recommandé de ne pas en utiliser plus de 1 ou 2 sur une instance donnée.
il n'a par contre pas su me donner la raison exacte pour laquelle ces statistiques serait à éviter (perf? stabilité? modification subite de comportement de l'optimiseur?).
Pouvez vous me donner votre expérience sur ce type de statistique et sur la manière dont vous les avez mis en place -ou pas.
Merci à ceux qui auront eu le courage de lire jusqu'au bout, et merci d'avance à ceux qui pourront me répondre
Partager