Un sistema antiguo ha llegado a nuestra oficina para algunos cambios y arreglos, pero también está sufriendo problemas de rendimiento. No sabemos exactamente cuál es la fuente de esta lentitud.¿Qué es mejor? ¿Subconsultas o internas que unen diez tablas?
Mientras estábamos refactorización del antiguo código encontramos varias consultas SQL con el patrón de seguimiento (las consultas se simplifican con fines de ejemplo):
SELECT
(
SELECT X
FROM A
WHERE A.id = TABLE.id
) AS COLUMN1,
(
SELECT Y
FROM B
WHERE B.id = TABLE.id
) AS COLUMN1,
(
SELECT Z
FROM C
WHERE C.id = TABLE.id
) AS COLUMN1,
...
FROM
TABLE
WHERE
TABLE.id = @param;
Estas consultas hacen varias consultas sub internos de cada columna que regreso.
estamos pensando en volver a escribir estas consultas en el patrón de la siguiente manera:
SELECT
A.X, B.Y, C.Z
FROM
TABLE
INNER JOIN A on A.ID = TABLE.ID
INNER JOIN B on B.ID = TABLE.ID
INNER JOIN C on C.ID = TABLE.ID
WHERE
TABLE.id = @param;
Con combinaciones internas son más fácil de leer y entender, pero ¿es realmente más rápido? ¿Es la mejor manera de escribirlos? Lamentablemente, el primero que reescribimos no mejoró el tiempo de consulta, hizo que la consulta fuera un poco más lenta.
Aquí está mi pregunta: ¿deberíamos reescribir todas estas consultas? ¿Estas subconsultas son una buena forma de hacer este trabajo? ¿Son más rápidos el camino de la unión interior?
Tom (Kyte, de la fama de Oracle) dio una buena (y breve) respuesta a una pregunta muy similar aquí: ["une vs subquery, existe cláusula"] (https://asktom.oracle.com/pls/asktom/f? p = 100: 11: 0 :::: P11_QUESTION_ID: 66812779016023) –