Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/12/2008, 10:47
carlos-paredes
 
Fecha de Ingreso: enero-2008
Mensajes: 18
Antigüedad: 16 años, 4 meses
Puntos: 0
Optimizar consulta SQL

Que tal amigos, resulta que tengo unos problemas con unos querys de SQL en un paquete de SSIS, en SQL Server 2005 ó lo que se llamaba DTS en SQL Server 2000, el caso es que uno de los querys esta tardando mucho en hacer las operaciones, la tabla contra la que hago el FULL JOIN estoy probando con 1200 registros, se esta tardando aproximadamente 6 minutos el query, y queria saber de que forma lo puedo optimizar para que tarde menos, he intentado varias cosas como ahorrar unos SUBSTRING que debo utilizar para sacar cierto número de digitos y meterlos en otra tabla antes de hacer el join pero aún asi tarda mucho, no estoy usando SELECT * y el DISTINCT lo debo utilizar que he leido que son las cosas que hay que evitar a la hora de optimizar consultas, entre otras cosas. aqui dejo el query para mas o menos poder ilustrar la operación, saludos

if exists (select cod_centro from cencostos)
begin
INSERT CuentasCeco
select DISTINCT SUBSTRING(cod_centro,1,7) + SUBSTRING(RTRIM(LTRIM(ISNULL(ACTNUMBR_1,'')))+RTRI M(LTRIM(ISNULL(ACTNUMBR_2,'')))+RTRIM(LTRIM(ISNULL (ACTNUMBR_3,'')))+RTRIM(LTRIM(ISNULL(ACTNUMBR_4,'' )))+RTRIM(LTRIM(ISNULL(ACTNUMBR_5,'')))+RTRIM(LTRI M(ISNULL(ACTNUMBR_6,'')))+RTRIM(LTRIM(ISNULL(ACTNU MBR_7,'')))+RTRIM(LTRIM(ISNULL(ACTNUMBR_8,''))),8, 17)
,SUBSTRING(ACTDESCR,1,51)
,SUBSTRING(RTRIM(LTRIM(ACCTTYPE)),1,3)
,SUBSTRING(cod_centro,43,4)
,SUBSTRING(cod_centro,1,7)
from cencostos FULL JOIN gl00100 Cu ON 1=1
WHERE NOT EXISTS(SELECT ACTINDX FROM gl00100 WHERE RTRIM(LTRIM(ACTNUMBR_1))+RTRIM(LTRIM(ACTNUMBR_2))+ RTRIM(LTRIM(ACTNUMBR_3))+RTRIM(LTRIM(ACTNUMBR_4))+ RTRIM(LTRIM(ACTNUMBR_5))+RTRIM(LTRIM(ACTNUMBR_6))+ RTRIM(LTRIM(ACTNUMBR_7))+RTRIM(LTRIM(ACTNUMBR_8)) = SUBSTRING(cod_centro,1,7) + SUBSTRING(RTRIM(LTRIM(cu.ACTNUMBR_1))+RTRIM(LTRIM( cu.ACTNUMBR_2))+RTRIM(LTRIM(cu.ACTNUMBR_3))+RTRIM( LTRIM(cu.ACTNUMBR_4))+RTRIM(LTRIM(cu.ACTNUMBR_5))+ RTRIM(LTRIM(cu.ACTNUMBR_6))+RTRIM(LTRIM(cu.ACTNUMB R_7))+RTRIM(LTRIM(cu.ACTNUMBR_8)),8,17))
and SUBSTRING(cod_centro,1,7) + SUBSTRING(RTRIM(LTRIM(ISNULL(ACTNUMBR_1,'')))+RTRI M(LTRIM(ISNULL(ACTNUMBR_2,'')))+RTRIM(LTRIM(ISNULL (ACTNUMBR_3,'')))+RTRIM(LTRIM(ISNULL(ACTNUMBR_4,'' )))+RTRIM(LTRIM(ISNULL(ACTNUMBR_5,'')))+RTRIM(LTRI M(ISNULL(ACTNUMBR_6,'')))+RTRIM(LTRIM(ISNULL(ACTNU MBR_7,'')))+RTRIM(LTRIM(ISNULL(ACTNUMBR_8,''))),8, 17) not in (select Expr1 from CuentasCeco)
end

INSERT INTO CuentasCeco
SELECT 'CODIGO_COMPLETO','DESCRIPCION','BCE','CC1','CC2'

nota: la tabla cencostos apenas posee 33 registros y gl00100 posee 1200 registros