Subject | Optimize this view |
---|---|
Author | jbrugger |
Post date | 2007-08-23T14:55:27Z |
This is a "never-ending" view (it just ends my patience :)
CREATE VIEW VW_PRECIOS_REFERENCIA_UNITARIOS(
CODIGO_MONODROGA,
CODIGO_CONCENTRACION,
CODIGO_FORMA_FARMACEUTICA,
PRECIO_REFERENCIA_UNITARIO)
AS
SELECT VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA,
VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION,
VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA,
case when precio_unitario_mas_vendido is null then
(precio_unitario_maximo + precio_unitario_minimo)/2 else
(precio_unitario_maximo + precio_unitario_minimo +
precio_unitario_mas_vendido)/3 END
FROM (VW_PRECIOS_UNITARIOS_MINIMOS INNER JOIN
VW_PRECIOS_UNITARIOS_MAXIMOS ON
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_FORMA_FARMACEUTICA) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_CONCENTRACION) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_MONODROGA)) LEFT JOIN
VW_PRECIOS_UNIT_MAS_DISPENSADOS ON
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_FORMA_FARMACEUTICA) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_CONCENTRACION) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_MONODROGA)
;
Plan:
PLAN JOIN (MERGE (SORT (VW_PRECIOS_UNITARIOS_MAXIMOS
VW_PRECIOS_UNITARIOS MEDICAMENTOS ORDER MEDICAMENTOS_IDX3 INDEX
(MEDICAMENTOS_IDX1)), SORT (VW_PRECIOS_UNITARIOS_MINIMOS
VW_PRECIOS_UNITARIOS MEDICAMENTOS ORDER MEDICAMENTOS_IDX3 INDEX
(MEDICAMENTOS_IDX1))), JOIN (MERGE (SORT
(VW_PRECIOS_UNIT_MAS_DISPENSADOS VW_TOTALES_DISPENSADOS_POR_MED
CONSUMOS_FARMACIA ORDER FK_CONS_FARMACIA_MEDICAMENTOS), SORT (SORT
(JOIN (VW_PRECIOS_UNIT_MAS_DISPENSADOS VW_MEDICAMENTOS_MAS_DISPENSADOS
VW_TOTALES_DISPENSADOS_POR_MED CONSUMOS_FARMACIA ORDER
FK_CONS_FARMACIA_MEDICAMENTOS, VW_PRECIOS_UNIT_MAS_DISPENSADOS
VW_MEDICAMENTOS_MAS_DISPENSADOS MEDICAMENTOS INDEX
(PK_MEDICAMENTOS))))), VW_PRECIOS_UNIT_MAS_DISPENSADOS MEDICAMENTOS
INDEX (PK_MEDICAMENTOS)))
All referenced views are pretty fast, except
"VW_PRECIOS_UNIT_MAS_DISPENSADOS" which takes ~ 10 secs to complete.
Data Tables have 250000 records (Consumos_Farmacia) and 35000 records
(Medicamentos)
Is there anything I could do to make this view usable?
Tell me if you need more info about tables or views involved.
Thanks!!!
CREATE VIEW VW_PRECIOS_REFERENCIA_UNITARIOS(
CODIGO_MONODROGA,
CODIGO_CONCENTRACION,
CODIGO_FORMA_FARMACEUTICA,
PRECIO_REFERENCIA_UNITARIO)
AS
SELECT VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA,
VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION,
VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA,
case when precio_unitario_mas_vendido is null then
(precio_unitario_maximo + precio_unitario_minimo)/2 else
(precio_unitario_maximo + precio_unitario_minimo +
precio_unitario_mas_vendido)/3 END
FROM (VW_PRECIOS_UNITARIOS_MINIMOS INNER JOIN
VW_PRECIOS_UNITARIOS_MAXIMOS ON
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_FORMA_FARMACEUTICA) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_CONCENTRACION) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA =
VW_PRECIOS_UNITARIOS_MAXIMOS.CODIGO_MONODROGA)) LEFT JOIN
VW_PRECIOS_UNIT_MAS_DISPENSADOS ON
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_FORMA_FARMACEUTICA =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_FORMA_FARMACEUTICA) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_CONCENTRACION =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_CONCENTRACION) AND
(VW_PRECIOS_UNITARIOS_MINIMOS.CODIGO_MONODROGA =
VW_PRECIOS_UNIT_MAS_DISPENSADOS.CODIGO_MONODROGA)
;
Plan:
PLAN JOIN (MERGE (SORT (VW_PRECIOS_UNITARIOS_MAXIMOS
VW_PRECIOS_UNITARIOS MEDICAMENTOS ORDER MEDICAMENTOS_IDX3 INDEX
(MEDICAMENTOS_IDX1)), SORT (VW_PRECIOS_UNITARIOS_MINIMOS
VW_PRECIOS_UNITARIOS MEDICAMENTOS ORDER MEDICAMENTOS_IDX3 INDEX
(MEDICAMENTOS_IDX1))), JOIN (MERGE (SORT
(VW_PRECIOS_UNIT_MAS_DISPENSADOS VW_TOTALES_DISPENSADOS_POR_MED
CONSUMOS_FARMACIA ORDER FK_CONS_FARMACIA_MEDICAMENTOS), SORT (SORT
(JOIN (VW_PRECIOS_UNIT_MAS_DISPENSADOS VW_MEDICAMENTOS_MAS_DISPENSADOS
VW_TOTALES_DISPENSADOS_POR_MED CONSUMOS_FARMACIA ORDER
FK_CONS_FARMACIA_MEDICAMENTOS, VW_PRECIOS_UNIT_MAS_DISPENSADOS
VW_MEDICAMENTOS_MAS_DISPENSADOS MEDICAMENTOS INDEX
(PK_MEDICAMENTOS))))), VW_PRECIOS_UNIT_MAS_DISPENSADOS MEDICAMENTOS
INDEX (PK_MEDICAMENTOS)))
All referenced views are pretty fast, except
"VW_PRECIOS_UNIT_MAS_DISPENSADOS" which takes ~ 10 secs to complete.
Data Tables have 250000 records (Consumos_Farmacia) and 35000 records
(Medicamentos)
Is there anything I could do to make this view usable?
Tell me if you need more info about tables or views involved.
Thanks!!!