Query de funcion a vista (costo)
Publicado por Fernando (3 intervenciones) el 20/06/2019 19:19:03
Buena tarde.
Les comento el problema que tengo en oracle 12c
Actualmente tengo una funcion que regresa un cursor, en la funcion tengo un query el cual es rapido y tiene muy poco costo, lo que quiero hacer es llevar ese query a una vista ya que será usado en otros procesos.
La diferencia esta en donde se ponen los filtros y es algo asi
query actual (usado por la funcion)
()
Como podemos ver, el filtro se encuengtra en el primer subquery (univ) y la respuesta es rapida
Ahora para poder hacer la vista el filtro lo saco de ese subquery y lo pongo hasta el ultimo nivel
y con ese cambio el tiempo de ejecucion y el costo eleva a mas de 1000% no se si me puedan orientar para que el query siga siendo rapido.
Les comento el problema que tengo en oracle 12c
Actualmente tengo una funcion que regresa un cursor, en la funcion tengo un query el cual es rapido y tiene muy poco costo, lo que quiero hacer es llevar ese query a una vista ya que será usado en otros procesos.
La diferencia esta en donde se ponen los filtros y es algo asi
query actual (usado por la funcion)
(
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WITH UNIV AS(
select *
from tabla1 dc
join tabla2 RL on dc .col= rl .col
join tabla3 drl ON RL .col= DRL.col
join tabla4 lot on lot.col= DRL.col
WHERE 1=1
tabla1.filtro=&filtro
)
SELECT *
FROM UNIV U
left join tabla6 ruc on ruc.coln=U.col2
left join tabla6 doc on doc.coln=U.col2
Como podemos ver, el filtro se encuengtra en el primer subquery (univ) y la respuesta es rapida
Ahora para poder hacer la vista el filtro lo saco de ese subquery y lo pongo hasta el ultimo nivel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WITH UNIV AS(
select *
from tabla1 dc
join tabla2 RL on dc .col= rl .col
join tabla3 drl ON RL .col= DRL.col
join tabla4 lot on lot.col= DRL.col
WHERE 1=1
)
SELECT *
FROM UNIV U
left join tabla6 ruc on ruc.coln=U.col2
left join tabla6 doc on doc.coln=U.col2
where u.filtro =&filtro ;
Valora esta pregunta


0