Cada nueva versión del optimizador cada vez es más dependiente de las estadísticas, la calidad de ellas puede ser suficiente para una versión anterior pero para la actual no.
Como regla general se ha de analizar una tabla (en casacada, es decir incluyendo índices) cuando se realizan modificaciones importantes sobre ella. Por ejemplo:
- truncates
- Insert into .. select …
- Cualquier inserción, actualización y borrado masivo (se entiendo por masivo que afecte a más de un 20% del total de los registros)
Las estadísticas se pueden obtener de muchas maneras, algunas más rápidas que otras (estimaciones parciales, completas, etc…) y con más o menos generación de redologs.
Por ejemplo si usamos el paquete DBMS_STATS (https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS059) concretamente el subprograma GATHER_TABLE_STATS (https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68582), la sintaxis es muy similar para los subprogramas: