tipos - Usando ''IN'' con una subconsulta en las declaraciones de SQL
subconsultas base de datos (3)
¿Hay algún problema de rendimiento al usar la palabra clave "IN" en las declaraciones de SQL en lugares donde podemos usar JOIN?
SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
Como puede leer aquí , las UNIONES son más rápidas que las sub-selecciones.
No, está bien usar
Puede escribir la consulta anterior usando IN, EXISTS en todos los RDBMS, algunos también son compatibles con INTERSECT.
Semánticamente, se trata de una semi unión que "me da filas de la tabla A donde tengo al menos una coincidencia en la tabla B". Un INNER JOIN es "dame todas las filas correspondientes"
Entonces, si TableA tiene 3 filas y TableB tiene 5 filas que coinciden:
- INNER JOIN es 15 filas
- una semi-unión es 3 filas
Es por esto que IN y EXISTS son empujados por mí y por los otros tipos de SQL aquí: una JOIN es incorrecta, requiere DISTINCT y será más lenta.
EXISTS es compatible con varias columnas JOINs, IN no en SQL Server (lo hace en otras).
En lugar de un distinto, podrías 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.