Como parte de la estimación del Costos de Operadores, es necesario a veces estimar el tamaño de las relaciones intermedias antes de calcularlas. Se espera que una estimación cumpla con los siguientes requisitos:

  • Debe ser precisa
  • Debe ser fácil de calcular
  • No debe depender del método utilizado

Proyección

Si la proyección no elimina duplicados, entonces podremos utilizar una regla simple para obtener la cantidad de bloques que ocupa una proyección. Necesitaremos el tamaño de los campos, la cantidad de tuplas, y el tamaño de los bloques.

Si se eliminan duplicados, utilizaremos la variabilidad para estimar de forma más precisa la cardinalidad de la proyección.

Selección

La selección reduce el número de tuplas en el resultado, aunque mantiene el tamaño de cada tupla.

Para estimar el tamaño de una selección , utilizaremos la variabilidad de en , denominada .

Se le suele llamar a la fracción se denomina selectividad de en .

Si quiero calcular la cantidad de bloques, podremos utilizar análogamente:

Este método no nos permite selecciones con otros operadores, y asume una distribución uniforme.

Selección con histograma

El histograma nos resume la distribución de los valores que toma un atributo en una instancia de relación dada. No necesariamente cubrirá a todos los valores.

Los histogramas suelen agrupar a partir de quantiles, agrupando la misma cantidad de tuplas en cada sección.

Si el gestor conoce la cantidad de tuplas para un valor particular, puede devolver directamente el valor almacenado. Si el agrupamiento contiene más de un valor distinto, entonces podremos utilizar la variabilidad de ese grupo para una mejor estimación.

Para selecciones por rango, el histograma es aún más útil, pues podemos observar la distribución en un rango de valores.

Junta

Consideremos la junta , y . En principio, , dependiendo de como estén distribuidos los valores de en una y otra relación.

Dadas las variabilidades , y , asumiremos que los valores de en la relación con menor variabilidad están incluidos dentro de los valores de en la otra relación.

Luego, si asumimos que . Entonces por cada par de tupla en , la probabilidad de que se junten es de . Llamaremos a la selectividad de la junta, definida como .

A partir de esto, deducimos la cardinalidad del resultado como:

Si queremos estimar la cantidad de bloques, necesitaremos el factor de bloque. Este dependerá del tamaño de las tuplas. Recordemos que el tamaño de una tupla de está dado por , y el tamaño de una tupla en la junta está dado por la suma del tamaño de las tuplas de cada relación involucrada.

Una vez tenemos el factor de bloque, podremos fácilmente deducir la cantidad de bloques dividiendo la cantidad de tuplas entre el factor de bloque.

Junta con histograma

Si el gestor tiene histogramas para el atributo de junta, podría aproximar de mejor forma la cantidad de tuplas de la junta.

Supongamos que tenemos un histograma que divide el atributo en los valores más frecuentes, para cada una de las relaciones, con una última columna de los valores que quedaron sin agrupación.

41214202230otros
R.A20032012015065550
S.A15010018021085410

Para cada valor del que conocemos y (donde esto representa la cantidad de tuplas con el valor ) sabemos que la cantidad de tuplas en el resultado será: .

41214202230otros
R.A20032012015065550
S.A15010018021085410
R * S3000021600315005525

Para aquellos de los que no conocemos uno de los dos, estimaremos el faltante a partir de la columna sin agrupamiento, y la variabilidad.

Una vez calculado esto, debemos agregarlo al histograma y restarlo de la columna sin agrupamiento. Además, calcularemos para cada columna, sumando para los valores recién agregados.

41214202230otros
R.A2004332012015065507
S.A1501004118021085369
R * S3000043001312021600315005525

Finalmente, estimamos las tuplas correspondientes a la columna sin agrupamiento en el resultado utilizando la estimación simple (equiprobable):

Obtendremos entonces:

41214202230otros
R.A2004332012015065507
S.A1501004118021085369
R * S300004300131202160031500552515590

La estimación se obtiene sumando estas estimaciones, con: