Ho tre tabelle con una catena di due relazioni uno-a-molti. Ci sono due modi in cui posso pensare di recuperare i dati in base alla chiave primaria della prima tabella.
-
JOIN
ogni tabella (oLEFT JOIN
se ci sono righe inesistenti) in una singola query (SELECT * FROM t1, t2, t3 WHERE t1.id = 123 AND t2.t1_id = t1.id AND t3.t2_id = t2.id
) - Esegui tre query che collegano ogni volta alla chiave primaria della prima tabella (
SELECT t3.* FROM t3, t2, t1 WHERE t3.t2_id = t2.id AND t2.t1_id = t1.id AND t1.id = 123
). Mantieni aperta la connessione al database finché i dati non sono stati ricevuti da tutte e tre le tabelle
Usando un singolo JOIN
restituirai dati ridondanti e dovrai gestire il caso speciale quando ci sono zero righe sul lato destro separatamente. L'esecuzione di tre query implica che il motore del database dovrà eseguire operazioni molto simili per tre volte e potrebbe aumentare la latenza. È possibile dire quale è "migliore"? Dipende dalla situazione, ad es. la dimensione dei dati da recuperare è il database sullo stesso server / rete del codice chiamante, ecc.?