Optimización Bases de datos
TERCER ENTREGABLE BASES DE DATOS II
Universidad Nacional de Colombia
Medellín
2013
1.)
PRUEBA 1. Modelo relacional convencional
Tablas:
CREATE TABLE factura (consfactNUMBER(10) PRIMARY KEY,
fecha DATE,
codvendedor NUMBER(10),
cedcliente NUMBER(12));
CREATE TABLE detalle (codprodNUMBER(10) PRIMARY KEY,cantidad NUMBER(10),
precioventauni NUMBER(10),
codfactura NUMBER(10),
CONSTRAINT fk_consfact FOREIGN KEY(codfactura) REFERENCES factura(consfact));
Consulta Base:
SELECT a.consfact, a.fecha, a.codvendedor, a.cedcliente,
b.codprod, b.cantidad, b.precioventauni
FROM factura a, detalle b WHERE a.consfact=b.codfactura;
Sean M y N el número de filas de las tablas factura y detallerespectivamente.
El número de filas M será el número de muestras y N equivaldrá a (M * M/2); es decir que si tenemos 50 muestras entonces el resultado del JOIN estará dado por la cantidad N de filas donde N = (50 * 25) = 1250 filas.
20 muestras. JOIN = 200 filas
HASH JOIN
ID
Operación
Nombre
Filas
Bytes
Costo(CPU)
Tiempo
0
SELECT STATEMENT
2000
82000
7(15)
00:00:01
*1HASH JOIN
2000
82000
7(15)
00:00:01
2
TABLE ACCESS FULL
Factura
50
1200
2(0)
00:00:01
3
TABLE ACCESS FULL
Detalle
2000
34000
4(0)
00:00:01
1 - access("A"."CONSFACT"="B"."CODFACTURA")
MERGE JOIN/*+ USE_MERGE(a,b)*/
ID
Operación
Nombre
Filas
Bytes
Costo(CPU)
Tiempo
0
SELECT STATEMENT
2000
82000
7(15)
00:00:01
1
MERGE JOIN
2000
82000
7(15)
00:00:01
2TABLE BY INDEX ROWID
Factura
50
1200
2(0)
00:00:01
3
INDEX FULL SCAN
SYS_C007077
50
1(0)
00:00:01
4
SORT JOIN
2000
34000
5(20)
00:00:01
5
TABLE ACCESS FULL
Detalle
2000
34000
4(0)
00:00:01
4 - access("A"."CONSFACT"="B"."CODFACTURA") filter("A"."CONSFACT"="B"."CODFACTURA")
NESTED LOOPS/*+ USE_NL(a,b)*/
ID
Operación
Nombre
Filas
Bytes
Costo(CPU)Tiempo
0
SELECT STATEMENT
2000
82000
100(1)
00:00:02
1
NESTED LOOPS
2000
82000
100(1)
00:00:02
2
TABLE ACCESS FULL
Factura
50
1200
2(0)
00:00:01
*3
TABLE ACCESS FULL
Detalle
40
680
2(0)
00:00:01
3 - filter("A"."CONSFACT"="B"."CODFACTURA")
Salida TKPROFdespues de reiniciar BD para liberar Buffers
call count cpu elapsed disk querycurrent rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 15 0.03 0.24 1647 1664 0 200
------- ------ -------- -------------------- ---------- ---------- ----------
total 17 0.03 0.24 1647 1664 0 200
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
200 200 200 HASH JOIN (cr=1664 pr=1647 pw=0 time=239766 us cost=7 size=82000 card=2000)
20 2020 TABLE ACCESS FULL FACTURA (cr=6 pr=6 pw=0 time=4313 us cost=2 size=1200 card=50)
200 200 200 TABLE ACCESS FULL DETALLE (cr=1658 pr=1641 pw=0 time=234670 us cost=4 size=34000 card=2000)
100 muestras. JOIN = 5000 filas
HASH JOIN
ID
Operación
Nombre
Filas
Bytes
Costo(CPU)
Tiempo
0
SELECT STATEMENT
2000
82000
7(15)
00:00:01
*1
HASH JOIN
200082000
7(15)
00:00:01
2
TABLE ACCESS FULL
Factura
50
1200
2(0)
00:00:01
3
TABLE ACCESS FULL
Detalle
2000
34000
4(0)
00:00:01
1 - access("A"."CONSFACT"="B"."CODFACTURA")
MERGE JOIN /*+ USE_MERGE(a,b)*/
ID
Operación
Nombre
Filas
Bytes
Costo(CPU)
Tiempo
0
SELECT STATEMENT
2000
82000
7(15)
00:00:01
1
MERGE JOIN
2000
82000
7(15)
00:00:01
2
TABLE BY INDEX ROWID...
Regístrate para leer el documento completo.