SQL - Query Muy Lento.. ayuda

 
Vista:
Imágen de perfil de Claudia

Query Muy Lento.. ayuda

Publicado por Claudia (3 intervenciones) el 11/04/2008 00:03:14
A ver chicos si sois tan lindos de ayudarme:

1. Tengo el siguiente Query en un rango de fecha que saca las ventas de una lista de productos:

Select p.cte, c.nom, substring(p.ven ,1,3)+' '+substring(v.nom,1,21), c.seg_mer ,pd.sub_alm, pd.cve_art, pd.des, p.fec_fac, (pd.ped-pd.dev)*pd.precio
,(pd.ped-pd.dev)*pd.costo, (((pd.ped-pd.dev)*pd.precio - (pd.ped-pd.dev)*pd.costo)/((pd.ped-pd.dev)*pd.precio+.01))*100

From pedped p (index = pedped13), peddet pd (index = peddet4), cxccli c, pedven v

Where p.fec_ped between '20080101' and '20080130'
and p.cia ='MAS'
and p.status Not IN ('TICN','FACN','FAD')
and pd.cia = p.cia
and pd.alm = p.alm
and pd.cve = p.num
and pd.serie = p.serie
and pd.cve_art in (select codigo from MAXIMA_PRODUCTS_CONQUEST)
and v.cve = p.ven
and c.cia = p.cia
and c.cve = p.cte

order by substring(p.ven ,1,3)+' '+substring(v.nom,1,21)

El reporte demora un poco pero sale bien (al menos eso creíamos), como se supone que es un reporte de venta de productos ya facturados me dí cuenta que donde está el WHERE hace referencia al campo fec_ped (fecha de pedido) de la tabla pedped y esto no es correcto debe ser al campo fec_fac (fecha de facturación); pero si cambio la linea del WHERE por : Where p.fec_fac between '20080101' and '20080130' se demora el triple y el programa manda el mensaje "Tiempo de Espera Agotado". Como es posible que solo por el hecho de cambiar un campo se demore tanto, al regresarlo como estaba funciona bien, lo vuelvo a cambiar por el campo fec_fac y no sale help !!!!

Por favor ayudenme. De antemano muchas gracias

Claudia C.A.
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 Muy Lento.. ayuda

Publicado por Isaias (5072 intervenciones) el 11/04/2008 02:37:31
No use BETWEEN para comparar fechas, es mejor >= O <=

Where p.fec_fac >= '20080101' and p.fec_ped <= '20080130'

¿Hay INDICE por la columna p.fec_fac?
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
Imágen de perfil de Claudia

RE:Query Muy Lento.. ayuda

Publicado por Claudia (3 intervenciones) el 12/04/2008 21:14:50
Ok Gracias voy aprobar com me indicas; este campo p.fec_fac si tiene indices, porque? tiene algo que ver el indice, que pasa si se lo quito del Query?
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 Muy Lento.. ayuda

Publicado por Isaias (5072 intervenciones) el 15/04/2008 20:15:46
¿Que pasa si no es INDICE?

Pues, imaginate tu, que buscas al Dr. Ramos, en un edificio de 50 pisos, con 20 consultorios por piso y no tienes un DIRECTORIO en la entrada, ¿como lo buscarias?.

Tocar en cada consultorio de los 50 pisos y preguntar, "Se encuentra aqui el Dr. Ramos, psicologo?".

Con mucha suerte, tal vez lo encuentres en el primer consultorio del primer piso, ¿cierto?

Asi pasa con los datos, si no hay indices, se hace una busqueda SECUENCIAL (registros-tras-registro), ¿que pasa si tienes unos 2 millones de registros?

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