2008/10/7 Alvaro Herrera <[EMAIL PROTECTED]>: > Javier Chávez B. escribió: >> On Tue, Oct 7, 2008 at 7:02 PM, Alvaro Herrera <[EMAIL PROTECTED]> wrote: >> > Javier Chávez B. escribió: >> >> 2008/10/7 <[EMAIL PROTECTED]>: >> > >> >> > finalizaba , usando un cursor (haciendo un join de dos tablas con >> >> > aproximandamente una de 9383423 y la otra unos 3832237 ) junto con dos >> >> > tablas mas de mas o menos los mismos registros (millon y medio aprox). >> >> >> >> Ups !! creo que el problema viene por este lado .. los cursores en si >> >> son una estructura no muy recomendable para consultas de esta >> >> magnitud.. no puedes tratar de ir por otro camino??? >> > >> > Al contrario ... si tienes que entregarle un numero muy grande de >> > registros al cliente, es mas recomendable usar un cursor de manera que >> > pueda ir leyendolos de a pocos. >> >> Que ???? eso si que no lo sabia .. :S pero en armar un cursor es una >> estructura que se llena iterativamente o no??? > > Hmmm. > > Un cursor se ejecuta de la misma forma que una consulta común y > corriente. La única diferencia es que al cursor se le piden las tuplas > en conjuntos pequeños a medida que el usuario hace FETCH. En cambio a > una consulta invocada directamente se le piden todas las tuplas de una > sola vez. > > La verdad es que en el lado del servidor no hay casi ninguna diferencia > (hay un par de excepciones, que son caracteristicas especiales que se le > piden a los cursores cuando especificas WITH HOLD y/o WITH SCROLL). > Pero para el cliente puede ser muy diferente, porque en el caso de la > consulta directa tiene que ser capaz de recibir todo de una sola vez, y > por lo tanto ser capaz de emplazar (alloc) mucha memoria. En cambio con > el cursor, puede emplazar una cantidad pequeña de memoria recibiendo una > cantidad pequeña de tuplas, luego liberar esa memoria y recibir más > tuplas; y así repetir hasta consumir todas las tuplas del resultado. > > ¿Se entiende?
Yes .. Clarisimo!!! Obrigado :0) > >> eso en si no tiene mas costo que tentar de hacer todo con una consulta >> quiza mas compleja???? > > Hmm, si lo que el individuo está haciendo es tomar el resultado del > cursor y luego aplicando un "join" manualmente en la aplicación, > entonces ciertamente sería mejor usar una sola consulta más compleja. > Pero no es eso lo que yo entendí del primer post. Mmm puede ser .. personalmente siempre dejo de lado los cursores, voy a testear en algunas cosas.. Sld.s > -- > Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8 > "Llegará una época en la que una investigación diligente y prolongada sacará > a la luz cosas que hoy están ocultas" (Séneca, siglo I) > -- Cumprimentos jchavez linux User #397972 on http://counter.li.org/ -- TIP 8: explain analyze es tu amigo