Ver Mensaje Individual
  #6 (permalink)  
Antiguo 19/03/2010, 08:26
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sacar peso en bytes de un select

PRODUCTO CARTESIANO
R X S = Tr . Ts

INNER JOIN
R |X| S
Si R ∩ S = ∅ entonces Tr . Ts
Si R ∩ S = { clave de R } entonces <= Ts
Si R ∩ S = { clave de S } entonces <= Tr
Si R ∩ S = { atributo no clave } entonces Tr . Ts / V(A, r ) ó Tr .Ts / V(A,s)

Ejemplo:
Cliente |X| Sucursal ( por codigo de cliente)
TC = 5000 tuplas
TS = 50 tuplas
BC= 250 bloques
BS = 2 bloques

Supuesto : No hay índices

1) Estrategia de iteración simple
Examinar todos los pares de tuplas posibles , 250.000 tuplas para examinar

2) Leer un bloque de cliente y para cada tupla de este bloque, leemos “secuencialmente” toda la tabla sucursal.
Leer toda la tabla cliente me “cuesta” 5000tuplas / 20 tuplas/bloque = 250 accesos.
Como la cantidad de lecturas completas de sucursal es TC=5000 tuplas, entonces el

TOTAL de accesos a sucursal es de 10.000 accesos. (5.000 . 2 )

COSTO TOTAL = 250 + 10.000 = 10.250 accesos a bloque (BC + BS . TC)

3) Iteración por bloques.

Leer un bloque de cliente y para este bloque, leemos todos los bloques de sucursal y encontramos todal las tuplas de la “junta” de este par de bloques.
Para leer toda la tabla sucursal necesito leer todos los bloques de clientes, y no las tuplas como en el caso anterior.
COSTO TOTAL = 250 (cliente) + 250 (sucursal) + 250 (sucursal) = 750 accesos (BC +
BC . BS)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)