2011-08-06 813 views

Respuesta

10

No, está bien usar.

Puede escribir la consulta anterior utilizando IN, EXISTS en todos los RDBMS, algunos también admiten INTERSECT.

Semánticamente esta es una semi unión que "me da filas de la tabla A donde tengo al menos una coincidencia en la tabla B". Una unión interior es "dame todas las filas coincidentes"

Así que si TableA tiene 3 filas y TableB tiene 5 filas que coinciden con:

  • una combinación interna es de 15 filas
  • un semi-join es 3
  • filas

por eso, en y que existe son empujados por mí y los otros tipos SQL aquí: una combinación es incorrecta, requiere distintos y serán más lentas.

EXISTS admiten varias columnas JOINs, IN no en SQL Server (lo hace en otras).

+1

No está bien usarlo. Ver mi respuesta –

+0

@ T-clausen.dk: Tengo, estás equivocado – gbn

+0

Sí, estoy equivocado. Estaba tratando de demostrar que tenía razón al hacerte un ejemplo. Sin embargo, el ejemplo mostró que estaba equivocado. Me disculpo y eliminé mi respuesta. –

-1

Como se puede leer here, se une son más rápidos que los sub-selecciona.

+1

Como puede leer en otro lugar, las UNIONES son más lentas. http://explainextended.com/2009/06/16/in-vs-join-vs-exists/ La semántica es muy diferente -1 para proponer basura y no saber la diferencia – gbn

+0

Y tu enlace ni siquiera lo menciona – gbn

0

En lugar de un grupo distinto, puede usar group by. He tenido casos en los que obtuve un mejor tiempo de respuesta al usar join. Normalmente, cuando me estoy uniendo a todas las filas a través de una clave principal/relación de clave externa y donde está buscando una columna no clave. Especialmente si se une múltiples. El IN puede A VECES forzar un escaneo de índice y la unión TÍPICAMENTE usará una búsqueda si va al PK. Cuando diseñe sus tablas, alinee las claves principales para que estén en el mismo orden y declare explícitamente las relaciones PK/FK. Unirse NO está limitado a PK/FK. Pero el uso común de una unión es realizar una relación PK/FK y, en ese caso, mi mejor experiencia es utilizar una combinación con las teclas alineadas.

Cuestiones relacionadas