Que tal amigos, resulta que tengo unos problemas con unos querys de SQLen un paquete de SSIS, en SQL Server 2005 ó lo que se llamaba DTS enSQL Server 2000, el caso es que uno de los querys esta tardando muchoen hacer las operaciones, la tabla contra la que hago el FULL JOINestoy probando con 1200 registros, se esta tardando aproximadamente 6minutos el query, y queria saber de que forma lo puedo optimizar paraque tarde menos, he intentado varias cosas como ahorrar unos SUBSTRINGque debo utilizar para sacar cierto número de digitos y meterlos enotra tabla antes de hacer el join pero aún asi tarda mucho, no estoyusando SELECT * y el DISTINCT lo debo utilizar que he leido que son lascosas que hay que evitar a la hora de optimizar consultas, entre otrascosas. aqui dejo el query para mas o menos poder ilustrar la operación,saludos IF (SELECT COUNT(1) FROM cencostos) > 0 BEGIN INSERT CuentasCeco SELECT DISTINCT SUBSTRING(cod_centro,1,7) + SUBSTRING(RTRIM(LTRIM(ISNULL(ACTNUMBR_1,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_2,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_3,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_4,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_5,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_6,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_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.ACTNUMBR_7))+ RTRIM(LTRIM(cu.ACTNUMBR_8)),8,17)) AND SUBSTRING(cod_centro,1,7) + SUBSTRING(RTRIM(LTRIM(ISNULL(ACTNUMBR_1,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_2,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_3,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_4,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_5,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_6,'')))+ RTRIM(LTRIM(ISNULL(ACTNUMBR_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' laaplicación importa dos archivos de texto con información de cuentas ycentros de costos, luego eso se combina con la tabla gl00100, y de allise importa otro archivo de texto, que es el producto final que arrojael paquete el archivo de costos.txt tiene una estructura como la siguiente: 3100000VP. EJE. PERSONAS Y NEG COMERCIALES0510 claro tiene varios registros, esa información se inserta en la tabla cencostos, a través de un BULK INSERT el archivo de cuentas.txt tiene un estructura como la siguiente: 44702100061000044DEPRECIACION DE EQUIPOS AIRE ACONDICIONADO DET deigual forma esa información se inserta en la tabla cuentas con el BULKINSERT, antes del query que coloque al principio, hay 2 que leanteceden, gracias.
Bienvenido al Forum!!Te sugiero probar con el DTA para ver si es necesario algún Ãndice en la tabla de lectura.Con respecto a la parte de insert, si esa tabla tiene cluster index, entonces tardará más.Quizás te convenga, antes de ejecutar el SSIS, eliminar los Ãndices, cargar la tabla y agregar nuevamente los Ãndices.Saludos,
El DTA es el Index Tuning Wizard de 2005.Cluster Index es un Ãndice fÃsico que suelen tener todas las tablas. Al ser fÃsico, cada vez que se inserta alguna fila, se reacomodan el cluster index.Solamente puede haber 1 solo cluster index por tabla.Por el contrario, non cluster index, puede haber más. Dado que es un Ãndice no fÃsico, no genera tanto problema al insertar filas en esas tablas.Para más datos, te suguiero leer el BOL (Book on Line o Libros en lÃnea) que vienen con las herramientas del 2005.