Un par de comentarios al respecto. Si usas except estas usando ANSI y es correcto y recomendable, Sin embargo usa todas las columnas para comparar cosa que no suele ser lo mas rapido ni es lo que precisas.
Que tarde mas de 40 segundos puede ser debido a que agrega la comparacion pero habria que activar Statistics IO y analizar el plan para determinar la situacion real y el motivo de la tardanza adicional.. La cantidad de registros que insertas en el resultado es comparable a la que tenias en 2000 ? Por que no pruebas esta forma que deberia ser la mas eficiente. select a.* into dbo.Resultado from tabla1 a where not exists ( select * from tabla2 b where a.clave = b.clave ) Asegurate de que el indice en la tabla2 por la columna clave sea unico (si se puede) . Que tipo de indices tienes? -- -------------------------------- Atte. Ing. Jose Mariano Alvarez SQL Total Consulting On 5/16/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
Tuve que tomar una decisión temporalmente, porque tengo que salir del apuro: Tomo el conjunto de claves que debo extraer con "except" y después, el lugar de usar el Not In, uso la claúsula in: Select a.Clave into dbo.Claves from dbo.Tabla1 a except Select b.Clavefrom dbo.Tabla2 b Select a.* from dbo.Tabla1 a where a.Clave in ( select clave from dbo.Clave ) Esto tarda 01min 20seg en total en lugar de los 5 o más (ya que no terminaba lo tuve que cortar) con el not in. No soluciona el problema del not in, que sigue pendiente, pero por lo menos me saca del apuro. Saludos -----Original Message----- From: "Maxi Accotto" <[EMAIL PROTECTED]> To: "Daniel Aisenberg" <[EMAIL PROTECTED]> Date: Wed, 16 May 2007 21:19:31 -0300 Subject: [dbms] consulta en sql2005 no anda bien Hola, con esa sola informacion no es suficiente, compara los distintos planes de ejecucion, fijate el tema de indices, el tema de estadistocas, has cambiado de servidor? ----------------------------------------------------------- Microsoft MVP en SQL Server Mentor asociado en SQLTotalConsulting (excelencia en servicios y consultoria SQLServer) Orador Culminis - Microsoft Influencier www.sqltotalconsulting.com ----------------------------------------------------------- El 16/05/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escribió: > en 2000 tenia: > > select a.* into dbo.Resultado from tabla1 a where clave not in (select clave > from tabla2 ) > y tardaba menos de un minuto y pico para 6 o 7 millones de filas. > > en 2005... es eterno...!!!** > > Alguien sabe qué es lo que puede estar pasando?, parece no funcionar la > cláusula "not in" > > Pero ya probé también: > select a.* > into dbo.Resultado > from dbo.Tabla1 a > left join dbo.Tabla2 b > on a.clave = b.clave > where b.clave is null > > Tampoco funciona.. > > Como verán, trato de copiar los elementos contenidos en A y que no estén en > B. Tan simple como eso. > > Cuando hago la copia directa como sigue: > select a.* into dbo.Resultado from dbo.Tabla1 > tarda 40 segundos para 7 millones de registros > > Por favor, alguna clave para solucionar este tema. Se agradece. > > > --
