Estadísticas en Oracle (parte 1)

Muchas veces he insistido en que una base de datos debe ser una combinación de Estadística, Teoría de Conjuntos y Lenguaje Matemático Formal para el caso de una base de datos relacional.  De ahí la importancia en el entendimiento detallado y bien fundamentado de las tres.

Desafortunadamente Oracle Corporation no ha sido formal al adoptar en su tecnología la Estadística, ni siquiera ha demostrado conocer los fundamentos básicos de la Estadística como lo es su nomenclatura.  Por ejemplo habla de histogramas “balanceados por su altura”  que no significa nada para la Estadística.  La estadística habla de histogramas de frecuencia pero no existe tal cosa como lo que Oracle Corporation pretende vanidosamente y muy equivocadamente haber interpretado.

En otro momento hablaremos de los histogramas por lo que no mencionaré aquí información que Oracle almacena sobre ellos, pero en cuanto a las estadísticas que Oracle obtiene de la distribución de los datos en sus tablas y la Estadística real como Ciencia tenemos la siguiente relación (dado que las distribuciones de datos en tablas son distribuciones normales):

1) población – el universo sobre el cual se obtendrán conclusiones.  Se almacena en la columna num_rows.

2) tamaño de la muestra – es un subconjunto de la población sobre el cual se aplicarán operaciones para obtener conclusiones.  Se almacena en la columna sample_size.

3) número de observaciones sin repetición – es la cantidad de observaciones que componen la muestra sin incluir repeticiones.  Se almacena en la columna num_distinct.

4) función de distribución ó función de densidad de probabilidad – es la probabilidad de que una observación aleatoria x pertenezca a cualquier intervalo entre a y b, que es el área bajo la curva f(x) de a a b.  Se almacena en la columna density.

5) rango – es la diferencia entre los valores mayor y menor de la muestra.  Se infiere con la diferencia de high_value y low_value.

Dado que las columnas usadas para almacenar las medidas de dispersión y análisis estadísticas existen en una o más tablas dependiendo del contexto de la tabla que la contenga, no detallo a qué tabla pertenece cada columna, dándole así completa libertad al contexto mismo de la tabla.

Existen otras columnas que tienen relevancia para las estadísticas dentro de Oracle, ésto sin hablar de estadísticas haqueadas que es otro tema completamente distinto y muy vasto.  Son las siguientes:

1) last_analyzed – es la fecha de la última ejecución de los procedimientos de obtención de estadísticas sobre el objeto.

2) num_nulls – dado que la lógica de Oracle es ternaria donde FALSE != NULL y TRUE != NULL, entonces NULL == NULL,  y que no es posible almacenar un valor NULL se requiere una métrica que contabilice la cantidad de observaciones con valor NULL.

Hasta lo que he podido investigar, las otras medidas de dispersión se pierden al momento de terminar la ejecución de las estadísticas con dbms_stats porque aunque pudiera obtenerlas, no he hallado y puedo presumir que no existen columnas ni siquiera en las tablas x$ donde sean almacenadas.  Estoy hablando de estadísticas que no involucran histogramas, en este escenario las cosas cambian.

Advertisement

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.