Un vecchio sistema è arrivato nel nostro ufficio per alcune modifiche e correzioni, ma soffre anche di problemi di prestazioni. Non sappiamo esattamente quale sia la fonte di questa lentezza.Cosa c'è di meglio? Sottoquery o inner join dieci tabelle?
Mentre stavamo refactoring del vecchio codice che abbiamo trovato diverse query SQL con il modello seguito (le query sono semplificate per esempio scopo):
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;
Queste query fanno diverse query sub interni da ogni colonna hanno ritorno.
stiamo pensando di riscrivere queste query sul modello seguito:
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 inner join sono più facili da leggere e capire, ma è davvero più veloce? È il modo migliore per scriverli? Sfortunatamente il primo che abbiamo riscritto non ha migliorato il tempo di interrogazione, ha reso la query un po 'più lenta.
Ecco la mia domanda: dovremmo riscrivere tutte queste domande? Queste sottoquery sono un buon modo per fare questo lavoro? Sono più veloci nel modo interiore di unirsi?
Tom (Kyte, di fama Oracle) ha dato una bella (e breve) risposta a una domanda molto simile qui: ["join vs subquery, clausola Exists"] (https://asktom.oracle.com/pls/asktom/f? p = 100: 11: 0 :::: P11_QUESTION_ID: 66812779016023) –