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

Cuales son las desventajas del operador In?

Estas en el tema de Cuales son las desventajas del operador In? en el foro de SQL Server en Foros del Web. En uno de los hilos en este foro, alguien me escribio que es recomendable evitar la utilización del operador In. ¿Cual es la razón de ...
  #1 (permalink)  
Antiguo 28/10/2012, 23:38
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Pregunta Cuales son las desventajas del operador In?

En uno de los hilos en este foro, alguien me escribio que es recomendable evitar la utilización del operador In.

¿Cual es la razón de esta recomendación?
De lo contrario - ¿que es la alternativa?
¿Alguien conoce un sitio que explica el tema?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #2 (permalink)  
Antiguo 29/10/2012, 10:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cuales son las desventajas del operador In?

La lentitud de respuesta, en comparacion con EXISTS o NOT EXISTS, Microsoft recomiend dejar como ultima alternativa el comparador IN.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 30/10/2012, 06:56
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Exclamación ¿Tienes algún ejemplo?

Intentá el siguiente código:
Código SQL:
Ver original
  1. USE tempdb;
  2.  
  3. SELECT * INTO T1 FROM sys.messages;
  4. SELECT * INTO T2 FROM sys.messages;
  5.  
  6. SELECT *
  7. FROM T1
  8. WHERE message_id IN (SELECT message_id FROM T2);
  9.  
  10. SELECT *
  11. FROM T1
  12. WHERE EXISTS (SELECT message_id FROM T2 WHERE T2.message_id=T1.message_id);
Los planes de ejecución de ambas consultas son identicos.
¿Tienes algún ejemplo que muestra que el Exist es mejor que el In, o algun artículo acerca de este tema?

Desde ya- muchas gracias.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 30/10/2012, 09:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cuales son las desventajas del operador In?

http://stackoverflow.com/questions/2...-and-in-in-sql

Best Regards,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/10/2012, 10:45
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Cuales son las desventajas del operador In?

Gracias por el vinculo.
La mayoria de las respuestas allí son sobre la diferencia funcional (las capacidades de cada una) y no en el rendimiento.
Sin embargo- encontre por lo menos una respuesta util.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #6 (permalink)  
Antiguo 30/10/2012, 16:06
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cuales son las desventajas del operador In?

Tambien la puedes buscar en las MEJORES PRACTICAS de SQL Server, sobre el uso de T-SQL, ahi especifica claramente que el IN, debe dejarse como ultima opcion.

Se habla, sobre grandes cantidades de datos, no con algunos registros.

Saludos
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 10/11/2012, 14:30
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Cuales son las desventajas del operador In?

Abrí un nuevo blog, y mi primera entrada a sobre este tema:
https://sqlserverencastellano.wordpr...iento/#more-18
Mi conclusión (si no tienen paciecia a leér toda la entrada..) es que el operador Not In es menos eficaz que el Not Exists solo en caso de columnas que permiten nulos.
En otros casos (In vs. Exists, columnas que no habilitan nulos..) el rendimiento de ambos operadores es lo mismo.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #8 (permalink)  
Antiguo 12/11/2012, 13:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cuales son las desventajas del operador In?

GeriReshef

Respeto tu opinion, pero ambos operadores se han probado con MILLONES de registros y es muhco mas eficiente el NOT EXISTS/EXISTS.

Saludos
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 12/11/2012, 14:02
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Cuales son las desventajas del operador In?

iislas- ¿donde han probado? ¿quien ha probado? ¿tienes algún vínculo a un artículo en la red? ¿un script?

Mi "opinión" esta apoyada por una entrada muy detallada con scripts, impresiones de pantalla, planes de ejecución, Statistics IO, etcetera.

Libras, cuando me respondio, adjunto vínculos útiles que después del hecho coincidieron con mis conclusiones.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #10 (permalink)  
Antiguo 12/11/2012, 14:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cuales son las desventajas del operador In?

Con esta respuesta cierro mis comentarios sobre el tema:

¿Escucho hablar del proyeto LA ACADEMIA para México?, fue el "refrito" de OPERACION TRIUNFO en España.

Bueno, pues ese proyecto fue desarrollado para Grupo Salinas (TV Azteca, Iusacel, Elektra, Salinas y Rocha, etc.) por tu servidor y otros 7 colaboradores (comunicaciones, desarrollo, web, bases de datos).

A mi me toco desarrollar la base de datos (SQL Server 2000), que recibia MILLONES de llamadas, por un canal multi-hilos, para hacer todos los comparativos de recepcion ("Venta por llamadas telefonicas 01900").

Cuando haciamos comparativos, nos dimos cuenta que al utilizar NOT IN - IN (.....), era mucho mas lento que con NOT EXISTS.

Al ponerme a leer sobre el asunto, me di cuenta que el NOT IN - IN, hace un recorrido de los registtros (SCAN) y que el EXIST - NOT EXIST, por el contrario, utiliza los indices.

Por tanto, era mucho mas eficiente utlizar EXIST - NOT EXIST.

Como los programas fueron en VIVO, requeriamos de query's bastante eficientes, no deseo ocultar que al principio cometimos muchos errores en cuanto a la decision de utilzar "x o z" instruccion, pero con el tiempo, fuimos tomando experiencia al respecto (hablo de los años 2000).

Solo para que te des una idea de cuantos registros recibiamos, en la final de este programa, que fue un domingo, empezamos a las 2:30 y terminamos a las 00:30 hrs, recibiendo mas de 3 millones de llamadas.

Si esto no es significativo, entonces, ya no se que decir.

Saludos.
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 12/11/2012, 15:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cuales son las desventajas del operador In?

: aplauso:
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 13/11/2012, 00:42
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Mensaje Respuesta: Cuales son las desventajas del operador In?

iislas- con actitud tal como "Con esta respuesta cierro mis comentarios.." es muy dificil compartir nuestros conocimiento y experiencia con los demas.
No doy nada por sentado, cuando dudo - pruebo, y cuando no entiendo - pregunto.

Supongo que las columnas implicadas (en el In/Exist) en el proyecto que mencionaste fueron definidas como Null.
Mis conclusiones no son tan diferentes de las tuyas: el Exists / Not Exists es mejor que el In / Not In porque en caso de Null el Not Exists es mejor, y en los otros casos no es peor; así que como "regla de pulgar" mejor optar por Exists / Not Exists (incluso en casos que tienen el mismo rendimiento como In / Not In).

Para que esté mas tranquilo- voy a verificar mis conclusiones con tablas de 10,000,000 filas, lo antes posible.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:51.