Sentencia lenta

18/10/2008 - 02:43 por Julio Briceño | Informe spam
Saludos Cordiales,

Tengo la consulta de actualización:

"update t_pedidos_imprenta_detalles set estatus = 1 where numerotalon in(
select idticket from t_recepcionticket where idplanillarecibo = '101870')"

Suponiendo que la sub-consulta: "select idticket from t_recepcionticket
where idplanillarecibo = '101870'"

Se ejcuta en 1 segundo y devuelve:

19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735

No deberìa la anterior consulta de actualizaciòn ser tan ràpida como:


"update t_pedidos_imprenta_detalles set estatus = estatus where numerotalon
in(
19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735)"

Que tambièn tarda 1 segundo.

Es decir lo que devuelve la subconsulta tarda un segundo y si le paso los
valores tarda un segundo, es decir nada, pero si ejecuto la consulta de
actualizaciòn con la sub-consulta puede tardar minutos. Los campos
numerotalon y idplanillarecibo son campos claves-ìndices, asi que no entiendo
por què la abismal diferencia.

Otra consulta:

Dada la consulta de actualizaciòn:


insert into unogestionprod.dbo.t_recepcionticket (idticket, idplanillarecibo)
select idticket, 1111 from unogestionprod.dbo.t_temprecepcionticket
where idplanillarecibo = 10


Si estoy ingresando en una tabla un select de otra idèntica, no deberìa ser
màs ràpido que crear el select, guardarlo en un cursor y hacer las
inserciones una a una?


Saludos y gracias de antemano.

Preguntas similare

Leer las respuestas

#1 Pedro
18/10/2008 - 15:14 | Informe spam
Sobre la primera habria q revisar el plan de ejecucion, pero solo para
probar, ponla con un Join a ver si hay alguna diferencia:

update t_pedidos_imprenta_detalles set estatus = 1
from t_pedidos inner join t_recepcionticket
on t_pedidos.numerotalon=t_recepcionticket.idticket
where (t_recepcionticket.idplanillarecibo = '101870')

por si acaso, t_recepcionticket deberia tener un indice por idticket.


"Julio Briceño" escribió en el
mensaje news:
Saludos Cordiales,

Tengo la consulta de actualización:

"update t_pedidos_imprenta_detalles set estatus = 1 where numerotalon in(
select idticket from t_recepcionticket where idplanillarecibo = '101870')"

Suponiendo que la sub-consulta: "select idticket from t_recepcionticket
where idplanillarecibo = '101870'"

Se ejcuta en 1 segundo y devuelve:

19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735

No deberìa la anterior consulta de actualizaciòn ser tan ràpida como:


"update t_pedidos_imprenta_detalles set estatus = estatus where
numerotalon
in(
19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735)"

Que tambièn tarda 1 segundo.

Es decir lo que devuelve la subconsulta tarda un segundo y si le paso los
valores tarda un segundo, es decir nada, pero si ejecuto la consulta de
actualizaciòn con la sub-consulta puede tardar minutos. Los campos
numerotalon y idplanillarecibo son campos claves-ìndices, asi que no
entiendo
por què la abismal diferencia.

Otra consulta:

Dada la consulta de actualizaciòn:


insert into unogestionprod.dbo.t_recepcionticket (idticket,
idplanillarecibo)
select idticket, 1111 from unogestionprod.dbo.t_temprecepcionticket
where idplanillarecibo = 10


Si estoy ingresando en una tabla un select de otra idèntica, no deberìa
ser
màs ràpido que crear el select, guardarlo en un cursor y hacer las
inserciones una a una?


Saludos y gracias de antemano.






Respuesta Responder a este mensaje
#2 Maxi Accotto
18/10/2008 - 19:28 | Informe spam
Julio, para saber donde esta el problema es necesario ver los planes de
ejecuiciomn. Recorda que el tiempo que tarda puede estar dado por varios
factores (Bloqueos, indices, triggers)

Si por ejemplo esa tabla tiene muchos indices entonces el update no solo
debe actualizar el registro sino que tambien los indices.

Mostranos el plan y vemos que pasa


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Julio Briceño" escribió en el
mensaje de noticias:
Saludos Cordiales,

Tengo la consulta de actualización:

"update t_pedidos_imprenta_detalles set estatus = 1 where numerotalon in(
select idticket from t_recepcionticket where idplanillarecibo = '101870')"

Suponiendo que la sub-consulta: "select idticket from t_recepcionticket
where idplanillarecibo = '101870'"

Se ejcuta en 1 segundo y devuelve:

19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735

No deberìa la anterior consulta de actualizaciòn ser tan ràpida como:


"update t_pedidos_imprenta_detalles set estatus = estatus where
numerotalon
in(
19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
18949542,
18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
18821940,
18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
18821938,
18821946, 18821941, 19907735)"

Que tambièn tarda 1 segundo.

Es decir lo que devuelve la subconsulta tarda un segundo y si le paso los
valores tarda un segundo, es decir nada, pero si ejecuto la consulta de
actualizaciòn con la sub-consulta puede tardar minutos. Los campos
numerotalon y idplanillarecibo son campos claves-ìndices, asi que no
entiendo
por què la abismal diferencia.

Otra consulta:

Dada la consulta de actualizaciòn:


insert into unogestionprod.dbo.t_recepcionticket (idticket,
idplanillarecibo)
select idticket, 1111 from unogestionprod.dbo.t_temprecepcionticket
where idplanillarecibo = 10


Si estoy ingresando en una tabla un select de otra idèntica, no deberìa
ser
màs ràpido que crear el select, guardarlo en un cursor y hacer las
inserciones una a una?


Saludos y gracias de antemano.






Respuesta Responder a este mensaje
#3 Julio Briceño
23/10/2008 - 16:31 | Informe spam
Oye si la consulta mejorò en velocidad del cielo a la tierra hacièndola asì,
gracias.



"Pedro" wrote:

Sobre la primera habria q revisar el plan de ejecucion, pero solo para
probar, ponla con un Join a ver si hay alguna diferencia:

update t_pedidos_imprenta_detalles set estatus = 1
from t_pedidos inner join t_recepcionticket
on t_pedidos.numerotalon=t_recepcionticket.idticket
where (t_recepcionticket.idplanillarecibo = '101870')

por si acaso, t_recepcionticket deberia tener un indice por idticket.


"Julio Briceño" escribió en el
mensaje news:
> Saludos Cordiales,
>
> Tengo la consulta de actualización:
>
> "update t_pedidos_imprenta_detalles set estatus = 1 where numerotalon in(
> select idticket from t_recepcionticket where idplanillarecibo = '101870')"
>
> Suponiendo que la sub-consulta: "select idticket from t_recepcionticket
> where idplanillarecibo = '101870'"
>
> Se ejcuta en 1 segundo y devuelve:
>
> 19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
> 18949542,
> 18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
> 18821940,
> 18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
> 18821938,
> 18821946, 18821941, 19907735
>
> No deberìa la anterior consulta de actualizaciòn ser tan ràpida como:
>
>
> "update t_pedidos_imprenta_detalles set estatus = estatus where
> numerotalon
> in(
> 19416605, 19416604, 19045154, 19045155, 18949543, 19045153, 18949541,
> 18949542,
> 18821950, 18821951, 18821949, 18821948, 18821954, 18821947, 18821966,
> 18821940,
> 18821937, 18821953, 18821939, 20043667, 18821952, 20043666, 20043668,
> 18821938,
> 18821946, 18821941, 19907735)"
>
> Que tambièn tarda 1 segundo.
>
> Es decir lo que devuelve la subconsulta tarda un segundo y si le paso los
> valores tarda un segundo, es decir nada, pero si ejecuto la consulta de
> actualizaciòn con la sub-consulta puede tardar minutos. Los campos
> numerotalon y idplanillarecibo son campos claves-ìndices, asi que no
> entiendo
> por què la abismal diferencia.
>
> Otra consulta:
>
> Dada la consulta de actualizaciòn:
>
>
> insert into unogestionprod.dbo.t_recepcionticket (idticket,
> idplanillarecibo)
> select idticket, 1111 from unogestionprod.dbo.t_temprecepcionticket
> where idplanillarecibo = 10
>
>
> Si estoy ingresando en una tabla un select de otra idèntica, no deberìa
> ser
> màs ràpido que crear el select, guardarlo en un cursor y hacer las
> inserciones una a una?
>
>
> Saludos y gracias de antemano.
>
>
>
>
>
>



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