Oracle - query

 
Vista:

query

Publicado por mery (46 intervenciones) el 12/05/2005 16:51:39
hola a todos , tengo un query un poco extenso y que lee tablas tab grandes, lo que quisiera saber es como haga para que mejore el tempo de respuesta...y les pongo el query para que se hagan una idea y no se donde le pueda crea algunos index

Select a.c_proy, a.c_presta, a.c_anexo,
d.d_pater||' '||d.d_mater||', '||d.d_nombr as nombre,
uf_name_proyecto(a.c_proy) as nomproy,
max(a.m_saldo_actual_e) as m_saldo_actual_e,
max(b.m_cuota_mes_p_presta) as m_cuota_mes_p_presta,
sum(nvl(b.m_amortiz_p_presta,0)) as m_amortiz_p_presta,
sum(nvl(b.m_interes_p_presta,0)) as m_interes_p_presta,
sum(nvl(b.m_seg_desgra_p_presta,0)) as m_seg_desgra_p_presta
From lcta_cte_prestatario a,
lplanilla_cobranza b,
lliquidacion_cobranza c,
mprestatario d
Where a.c_presta = b.c_presta
and b.n_liquid_cobranza = c.n_liquid_cobranza
and a.c_presta = d.c_presta
and a.m_saldo_actual_e > 0
and a.f_anio_e||a.f_mes_e = '200312'
and to_char(b.f_pago,'YYYY') = '2003'
and c.f_anio_contable = '2003'
and c.i_liquid in (3,5)
Group by a.c_proy, a.c_presta, a.c_anexo, d.d_pater||' '||d.d_mater||',
'||d.d_nombr
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:query

Publicado por Leonardo (91 intervenciones) el 12/05/2005 19:42:59
Los indices deben crearse de acuerdo a tus igualdades, para que la busqueda sea rapida
a.c_presta = b.c_presta
b.n_liquid_cobranza = c.n_liquid_cobranza
a.c_presta = d.c_presta
Entonces debes crear indices en:
a) c_presta
b) c_presta y n_liquid_cobranza
c) n_liquid_cobranza
d) c_presta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:query

Publicado por mery (46 intervenciones) el 12/05/2005 19:54:54
ok gracias voy a probar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:query

Publicado por danzinger (20 intervenciones) el 14/05/2005 21:54:50
Estoy de acuerdo en el tema de indices, pero mira el plan de acceso a ver donde te está penalizando, quizás algun full table ...

Puedes intentar evitar las conversiones como
a.f_anio_e||a.f_mes_e = '200312'
and to_char(b.f_pago,'YYYY') = '2003'

Quizas con un EXTRACT (creo que es 9i)

Si no siempre puedes ir a los hints..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Query

Publicado por Cabalakis (10 intervenciones) el 15/05/2005 14:28:46
Efectivamente Danzinger, haciendo las conversiones que metes de las fechas, lo que haces es un full sobre la tabla ya que pierde los índicies de la tabla. Evitaría los to_char(b.f_pago,'YYYY') = '2003', y lo que podrías hacer, es un b.f_pago between to_date('01/01/2003','dd/mm/yyyy') and to_date('31/12/2003','dd/mm/yyyy'), y lo mismo con lo de a.f_anio_e||a.f_mes_e = '200312'........

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Query

Publicado por danzinger (20 intervenciones) el 15/05/2005 16:39:24
Me alegro que estes de acuerdo conmigo cabalakis xD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar