Cursores o tablas temporales

15/01/2004 - 09:05 por Rebeka | Informe spam
Hola,

Tengo una duda entre usar cursores o tablas temporales para trabajar con
conjunto de registros pero tratar de forma individual a cada uno de ellos.
Alguien me puede decir cual de las dos opciones es más eficiente, es decir,
consume menos, es más rápido,... Y si hay alguna opción mejor?

Gracias por adelantado.

Un saludo,
Rebeca.

Preguntas similare

Leer las respuestas

#6 Víctor Rafael Bocanegra Arias
15/01/2004 - 17:21 | Informe spam
Sin afan de entrar a polemizar sobre un tema que es muy subjetivo, yo diria
que felizmente no te haz encontrado con aquellos problemas en los que no
existe otra salida -aunque no desee- de utilizar cursores. Yo no estoy
sugeriendo que toda la gente use cursores, lo unico que digo es que es una
posibilidad que nos da el SQL para trabajar lo que no se puede resolver
trabajandolo por conjunto de tablas. Yo a diferencia tuya no tengo muchas
tablas a lo mucho 100, usuarios la mitad con los que tu cuentas, al igual
que tu , manejo triggers, procedimientos almacenados, EXTENDIDOS (por un
comentario anterior ;) ), pero aca en la empresa donde laboro no manejamos
quizas sistemas TRADICIONALES. Tenemos un programa de busquedas, por
parametros, fonéticos, etc, etc, en los cuales me he visto en la necesidad
de vez en cuando, cuando no existia una salida, a utilizar cursores. Eso no
significa que solo me importa el resultado y que cuando un proceso es lento
le hecho la culpa al servidor, muy por el contrario al igual que TU y que
muchos de los que estamos en este foro, reviso los planes de ejecucion, las
trazas del servidor, etc, para ver en donde se puede mejorar (un ejemplo a
esto fue la utilizacion de procedimientos extendidos). Bueno en realidad lo
de los "cursores" solo fue un comentario acerca del que porque existen,
quizas mas adelante con las nuevas versiones de motores bases de datos nos
brinden mas herramientas para poder evitar su uso.

Un saludo

Victor Rafael Bocanegra Arias
Lima, Peru


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
Victor:

por mas que muchos motores lo hagan y Sql tambien te comento que no esta
optimizado para hacerlo y que Microsoft mismo aconseja el no uso de estos.

Claro hay cosas que no se pueden resolver de otra manera pero te cuento


que
son las minimas.

Yo aca tengo mas de 900 tablas en un sistema ERP con mas de 100 usuarios,
mas muchos sistemas internos montados en SqlServer, "te imaginas los
triggers y Store que hay?" y te comento que en ningun caso tengo cursores,
cuando pense que era la unica solucion me puse a pensar e investigar y


casi
siempre (95% de los casos) lo pude hacer sin ellos, por lo cual el
rendimiento es bueno.

Ojo pienso que si estan es por algo y se pueden usar, pero hay que saber
todo lo que eso nos trae como problemas y luego no tratar de decirle a
nuestro Cliente que compre mas memoria o CPU por prestaciones.

Este es un tema largo y tendido, yo particularmente trato no solo de
asegurar un resultado por ejemplo de un Store o Consulta, sino lo que le
cuesta al motor hacer eso, si fuera todo ideal solo me deberia preocupar


por
el resultado y nada mas.

Salu2

Maximiliano Damian Accotto


"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
> Concuerdo contigo Max que cuando uno entra al mundo de las bases de


datos
> comete el error de querer trabajar con registros individuales como antes
> normalmente lo hacia y no explota realmente las caracteristicas del


motor
de
> base de datos. Pero no necesariamente uno trabaja con cursores por error
> sino porque es la UNICA solucion que se le encuentra a un problema. Para
mi
> esta errado decir que: "La forma de trabajar con cursores no es para la
que
> SqlServer esta pensado", se podria decir que: "Nosotros obtenemos una
mejor
> performance evitando los cursores" que creo que tienen distinto
significado.
> No solo MSSQL trabaja con cursores muchos otros motores de base de datos
> tambien lo hacen, y aveces como muy bien comentas estamos entranpados en
> utilizarlos por ser la UNICA solucion como repito.
>
> Salu2
>
> Victor Rafael Bocanegra Arias
> Lima, Peru
>
> "Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en


el
> mensaje news:
> > Solo como aporte:
> >
> > La forma de trabajar con cursores no es para la que SqlServer esta
> pensado,
> > ahora este mismo incluye Cursores como para poder usar por lo cual


queda
> en
> > uno si lo hace o no.
> >
> > Casi todo se puede hacer sin ellos, pero hay cosas en las cuales no


(las
> > menos menos) por lo tanto hay que recurrir a ellos sabiendo la baja
> > performance que estos tendran.
> >
> > Ademas de tablas temporales, te recomiendo que veas varibles tipo


Table,
> es
> > una opcion interesante donde es mucho mas rapido que las anteriores.
> >
> > Claro si pensas en poner una de miles de registros quizas te consuma
mucha
> > Ram por lo cual hay que ver bien en cada caso que usar.
> >
> > La idea de usar cursores o esa forma de pensar es muy comun cuando sos
> > programador y nunca viste SqlServer y pensas que todo se trabaja como
los
> > Recordset, es cuestion de cambiar un poco el modelo mental cosa que no
es
> > nada facil pero si factible e interesante.
> >
> > Salu2
> >
> > Maximiliano Damian Accotto
> >
> >
> > "Rebeka" escribió en el mensaje
> > news:
> > > Hola,
> > >
> > > Tengo una duda entre usar cursores o tablas temporales para trabajar
con
> > > conjunto de registros pero tratar de forma individual a cada uno de
> ellos.
> > > Alguien me puede decir cual de las dos opciones es más eficiente, es
> > decir,
> > > consume menos, es más rápido,... Y si hay alguna opción mejor?
> > >
> > > Gracias por adelantado.
> > >
> > > Un saludo,
> > > Rebeca.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Maximiliano D. A.
15/01/2004 - 17:31 | Informe spam
Ojo no te culpe de nada yo, cada cual usa las herramientas para cumplir un
fin y hay veces que no se puede optimizar todo como vos decis, que de por si
es muy cierto o lo que es peor quizas se quiere optimizar algo que no tarda
nada en procesar ni con 100.000 o mas registros, y de esos casos conozco,
que se ponen a tratar de mejorar algo que a la larga al usuario ni lo nota
porque entre 1s y 2s hmmm.

Creo que el uso de ciertas cosas deben ser medidas no? o sea hay veces q no
queda otra pero hay que estar muy seguros de ello no?

Un saludo enorme

Maximiliano Damian Accotto


"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:%
Sin afan de entrar a polemizar sobre un tema que es muy subjetivo, yo


diria
que felizmente no te haz encontrado con aquellos problemas en los que no
existe otra salida -aunque no desee- de utilizar cursores. Yo no estoy
sugeriendo que toda la gente use cursores, lo unico que digo es que es una
posibilidad que nos da el SQL para trabajar lo que no se puede resolver
trabajandolo por conjunto de tablas. Yo a diferencia tuya no tengo muchas
tablas a lo mucho 100, usuarios la mitad con los que tu cuentas, al igual
que tu , manejo triggers, procedimientos almacenados, EXTENDIDOS (por un
comentario anterior ;) ), pero aca en la empresa donde laboro no manejamos
quizas sistemas TRADICIONALES. Tenemos un programa de busquedas, por
parametros, fonéticos, etc, etc, en los cuales me he visto en la necesidad
de vez en cuando, cuando no existia una salida, a utilizar cursores. Eso


no
significa que solo me importa el resultado y que cuando un proceso es


lento
le hecho la culpa al servidor, muy por el contrario al igual que TU y que
muchos de los que estamos en este foro, reviso los planes de ejecucion,


las
trazas del servidor, etc, para ver en donde se puede mejorar (un ejemplo a
esto fue la utilizacion de procedimientos extendidos). Bueno en realidad


lo
de los "cursores" solo fue un comentario acerca del que porque existen,
quizas mas adelante con las nuevas versiones de motores bases de datos nos
brinden mas herramientas para poder evitar su uso.

Un saludo

Victor Rafael Bocanegra Arias
Lima, Peru


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
> Victor:
>
> por mas que muchos motores lo hagan y Sql tambien te comento que no esta
> optimizado para hacerlo y que Microsoft mismo aconseja el no uso de


estos.
>
> Claro hay cosas que no se pueden resolver de otra manera pero te cuento
que
> son las minimas.
>
> Yo aca tengo mas de 900 tablas en un sistema ERP con mas de 100


usuarios,
> mas muchos sistemas internos montados en SqlServer, "te imaginas los
> triggers y Store que hay?" y te comento que en ningun caso tengo


cursores,
> cuando pense que era la unica solucion me puse a pensar e investigar y
casi
> siempre (95% de los casos) lo pude hacer sin ellos, por lo cual el
> rendimiento es bueno.
>
> Ojo pienso que si estan es por algo y se pueden usar, pero hay que saber
> todo lo que eso nos trae como problemas y luego no tratar de decirle a
> nuestro Cliente que compre mas memoria o CPU por prestaciones.
>
> Este es un tema largo y tendido, yo particularmente trato no solo de
> asegurar un resultado por ejemplo de un Store o Consulta, sino lo que le
> cuesta al motor hacer eso, si fuera todo ideal solo me deberia preocupar
por
> el resultado y nada mas.
>
> Salu2
>
> Maximiliano Damian Accotto
>
>
> "Víctor Rafael Bocanegra Arias" escribió


en
> el mensaje news:
> > Concuerdo contigo Max que cuando uno entra al mundo de las bases de
datos
> > comete el error de querer trabajar con registros individuales como


antes
> > normalmente lo hacia y no explota realmente las caracteristicas del
motor
> de
> > base de datos. Pero no necesariamente uno trabaja con cursores por


error
> > sino porque es la UNICA solucion que se le encuentra a un problema.


Para
> mi
> > esta errado decir que: "La forma de trabajar con cursores no es para


la
> que
> > SqlServer esta pensado", se podria decir que: "Nosotros obtenemos una
> mejor
> > performance evitando los cursores" que creo que tienen distinto
> significado.
> > No solo MSSQL trabaja con cursores muchos otros motores de base de


datos
> > tambien lo hacen, y aveces como muy bien comentas estamos entranpados


en
> > utilizarlos por ser la UNICA solucion como repito.
> >
> > Salu2
> >
> > Victor Rafael Bocanegra Arias
> > Lima, Peru
> >
> > "Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió


en
el
> > mensaje news:
> > > Solo como aporte:
> > >
> > > La forma de trabajar con cursores no es para la que SqlServer esta
> > pensado,
> > > ahora este mismo incluye Cursores como para poder usar por lo cual
queda
> > en
> > > uno si lo hace o no.
> > >
> > > Casi todo se puede hacer sin ellos, pero hay cosas en las cuales no
(las
> > > menos menos) por lo tanto hay que recurrir a ellos sabiendo la baja
> > > performance que estos tendran.
> > >
> > > Ademas de tablas temporales, te recomiendo que veas varibles tipo
Table,
> > es
> > > una opcion interesante donde es mucho mas rapido que las anteriores.
> > >
> > > Claro si pensas en poner una de miles de registros quizas te consuma
> mucha
> > > Ram por lo cual hay que ver bien en cada caso que usar.
> > >
> > > La idea de usar cursores o esa forma de pensar es muy comun cuando


sos
> > > programador y nunca viste SqlServer y pensas que todo se trabaja


como
> los
> > > Recordset, es cuestion de cambiar un poco el modelo mental cosa que


no
> es
> > > nada facil pero si factible e interesante.
> > >
> > > Salu2
> > >
> > > Maximiliano Damian Accotto
> > >
> > >
> > > "Rebeka" escribió en el mensaje
> > > news:
> > > > Hola,
> > > >
> > > > Tengo una duda entre usar cursores o tablas temporales para


trabajar
> con
> > > > conjunto de registros pero tratar de forma individual a cada uno


de
> > ellos.
> > > > Alguien me puede decir cual de las dos opciones es más eficiente,


es
> > > decir,
> > > > consume menos, es más rápido,... Y si hay alguna opción mejor?
> > > >
> > > > Gracias por adelantado.
> > > >
> > > > Un saludo,
> > > > Rebeca.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida