Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Optimizar query con <>

Estas en el tema de Optimizar query con <> en el foro de SQL Server en Foros del Web. Hola! Como estan? Me pasaron para optimizar un query que esta tardando una hora, lo que veo es que tiene 5 <> para el mismo ...
  #1 (permalink)  
Antiguo 07/12/2016, 05:35
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 11 años, 10 meses
Puntos: 1
Optimizar query con <>

Hola! Como estan?
Me pasaron para optimizar un query que esta tardando una hora, lo que veo es que tiene 5 <> para el mismo campo, yo pense en usar un IN, pero el campo tiene muchos valores posibles, me ayudan por fa? probe con not exist in, pero tampoco me mejora mucho


AND (cuentas.dda_aux_6) <> 'GESTA'
AND (cuentas.dda_aux_6) <> 'CMES'
AND (cuentas.dda_aux_6) <> 'INIC'
AND (cuentas.dda_aux_6) <> 'PROM'
AND (cuentas.dda_aux_6) <> 'ACEF'

Muchas gracias!
Lau
  #2 (permalink)  
Antiguo 07/12/2016, 06:19
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 358
Antigüedad: 4 años, 9 meses
Puntos: 39
Respuesta: Optimizar query con <>

Puedes utilizar Not In:
Código SQL:
Ver original
  1. SELECT ..
  2. FROM ..
  3. WHERE cuentas.dda_aux_6 NOT IN ('GESTA' , 'CMES' ,'INIC','PROM' ,'ACEF');
Este query obliga un Scan a lo largo de la tabla.. Puede ser que se puede mejorarlo con un Filtered Index.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 07/12/2016, 07:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 6.881
Antigüedad: 10 años, 8 meses
Puntos: 697
Respuesta: Optimizar query con <>

No pones todo tu query pero para esos casos se recomienda el uso de subqueries, digamos que tienes tabla1 y tabla2, las validaciones irian sobre tabla2, con esto en mente podriamos hacer algo asi:

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN
  3. (
  4. SELECT * FROM tabla2 WHERE campo1<>'bla bla' AND campo1<>'bla bla'.....
  5. ) AS t2 ON (t1.id0t2.id)

Que estamos haciendo con esto? en lugar de aplicar el filtro sobre el conjunto final de valores(que seria la union de las 2 tablas) nada mas estamos uniendo los valores que cumplen la condicion, con esto reducimos el numero de filas afectadas por la condicion ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me



La zona horaria es GMT -6. Ahora son las 23:09.