Este es un tema bastante importante para aprovechar los planes de ejecución más adecuados a cada sentencia. Realmente consiste en recopilar y actualizar el catálogo de Oracle.
Por ejemplo, podemos consultar la vista de Oracle "ALL_TABLES", si no tomamos estadísticas de la tabla, en dicha vista no aparecerán actualizados el número de registros, campo NUM_ROWS.
Podéis realizar un ejemplo, crear una tabla cualquiera e insertarle datos, buscar la tabla en dicha vista:
select * from all_tables where TABLE_NAME = 'TABLA';
Veréis como no ha actualizado dicha vista, a continuación ejecutar las estadísticas para la tabla creada:
DBMS_STATS.GATHER_TABLE_STATS( ownname => 'OWNER', tabname => 'TABLA');
Y en este momento si que os aparecerá actualizada.
En el caso de querer tomar las estadísticas a nivel de particiones:
DBMS_STATS.GATHER_TABLE_STATS( ownname => 'OWNER', tabname => 'TABLA', partname => 'NOMBRE_PARTICION', estimate_percent => null, granularity=> 'PARTITION', cascade => TRUE );
Un saludo, gracias.