Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/10/2010, 14:45
degauss
 
Fecha de Ingreso: enero-2010
Ubicación: Stgo - Chile
Mensajes: 73
Antigüedad: 14 años, 3 meses
Puntos: 0
Optimizacion de QUERY SQL

Saludos tengo la siguiente duda..

estoy haciendo una carga de datos (.dat) a sql a varias tablas especificas... al final decidi trabajar todo con procedimientos almacenados.- en el sentido de que a traves de VB6, voy pasando todos los parametros correspondientes para su insercion o update como corresponde.- uno de los SP es asi:

USE [BD_Cas]
GO
/****** Object: StoredProcedure [dbo].[bd_cas_t_cara_a] Script Date: 10/19/2010 17:43:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[bd_cas_t_cara_a]
@region smallint,
@provincia smallint,
@comuna smallint,
@folio integer,
----
@c_uv varchar(3),
@c_tipo_a varchar(2),
@poblacion varchar(3),
@dc_manzana varchar(4),
@c_calle varchar(4),
@domicilio varchar(6),
@block varchar(3),
@depto varchar(4),
@encuestador smallint,
@puntaje float,
@fecha_ap varchar(8)
as
declare @folio1 integer
declare @region1 integer
declare @provincia1 integer
declare @comuna1 integer
SELECT @folio1 = dc_Folio, @region1 = dc_Region, @provincia1 = dc_Provincia, @comuna1 = dc_Comuna FROM t_cara_a WHERE dc_Region = @region AND dc_Provincia = @provincia AND dc_Comuna = @comuna AND dc_Folio = @folio

----
declare @urb_rural integer
set @urb_rural =(SELECT dc_urbano_rural FROM t_calles
WHERE dc_Region = @region
AND dc_Provincia = @provincia
AND dc_Comuna = @comuna
AND dc_Calle = @c_calle)
if @urb_rural is null
begin
set @urb_rural = 1
end
-----------------------------------------------------------------------
declare @address varchar(6)
set @address = substring(CONVERT(varchar(8), @domicilio),1,6)
-----------------------------------------------------------------------
if @block = ''
begin
set @block = 0
end
else
begin
set @block = substring(convert(varchar(3), @block),1,3)
end
if @depto = ''
begin
set @depto = 0
end
else
begin
set @depto = substring(convert(varchar(4), @depto),1,4)
end
begin
if @folio = @folio1 and @region = @region1 and @provincia = @provincia1 and @comuna = @comuna1
begin
DELETE t_cara_a where dc_Folio = @folio
INSERT INTO t_cara_a (DC_region, dc_Provincia, DC_Comuna, DC_Folio, dc_urbano_rural, dc_unidad_vecinal,
dc_agrup_habit, dc_poblacion, dc_manzana, dc_calle, dg_numero_casa, dg_numero_block_casa, dg_numero_depto_sitio,
dc_encuestador, di_Ptje_Factor_Total, df_encuesta)
VALUES (@region, @provincia, @comuna, @folio,@urb_rural, @c_uv, @c_tipo_a, @poblacion, @dc_manzana,
@c_calle, @address, @block,@depto, @encuestador,@puntaje ,@fecha_ap)
--------------------------------------------------------------------------
--UPDATE t_cara_a SET dc_urbano_rural = @urb_rural, dc_unidad_vecinal = @c_uv, dc_agrup_habit = @c_tipo_a,
--dc_poblacion = @poblacion, dc_manzana = @dc_manzana, dc_calle = @c_calle, dg_numero_casa = @domicilio,
--dg_numero_block_casa = @block, dg_numero_depto_sitio = @depto, dc_encuestador = @encuestador,
--di_Ptje_Factor_Total = @puntaje, df_encuesta = @fecha_ap
--WHERE dc_Region = @region AND dc_Provincia = @provincia AND dc_Comuna = @comuna AND dc_Folio = @folio
end
else
begin
INSERT INTO t_cara_a (DC_region, dc_Provincia, DC_Comuna, DC_Folio, dc_urbano_rural, dc_unidad_vecinal,
dc_agrup_habit, dc_poblacion, dc_manzana, dc_calle, dg_numero_casa, dg_numero_block_casa, dg_numero_depto_sitio,
dc_encuestador, di_Ptje_Factor_Total, df_encuesta)
VALUES (@region, @provincia, @comuna, @folio,@urb_rural, @c_uv, @c_tipo_a, @poblacion, @dc_manzana,
@c_calle, @address, @block,@depto, @encuestador,@puntaje ,@fecha_ap)
end

end
SET NOCOUNT ON

Ahora mi duda es ... cuando hago la 1era insercion con la Tabla vacia, la insercion la hace super rapido, pero cuando pasa la 2da ronda y inserto anteriormente los datos despues al momento de hacer el update encuentro que se demora mucho... tengo dudas no se si es mejor ocupar un UPDATE o un DELETE/INSERT ..

o si hay alguna forma de optimizar mas el procedimiento almacenado para que corra de mejor forma..

Ojala puedan dejar sus comentarios para poder resolver este enigma para mi .. jaja gracias de antemano a todos.
Saludos cordiales.