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.
 

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.






Preguntas similares