Vastus (03.12.2022 15:33): Sõltub päringust ja andmebaasisüsteemist.
Katsetasin Oracles (12.1) ja PostgreSQL (14) põhjal, mis olid samas serverarvutis. Katsetamisel kasutatud andmebaas ja andmed olid ühesugused.
Oletame, et andmebaasis on järgnevale kontseptuaalsele strukuurile vastavad tabelid:
[Vanem]-1--------0..*-[Laps]
Päringud:
SELECT *
FROM Laps
INNER JOIN Vanem USING (vanem_id);
SELECT *
FROM Laps
LEFT JOIN Vanem USING (vanem_id);
on sellisel juhul loogiliselt samaväärsed, st annavad alati sama tulemuse.
INNER JOIN operatsioon oleks antud juhul piisav, sest iga laps on seotud täpselt ühe vanemaga.
Kas LEFT JOIN kasutamine mõjutab antud juhul töökiirust?
Lühike vastus on, et PostgreSQL ja Oracle puhul ei tundu sisulist mõju olevat. SIIN on katsetus PostgreSQL ja Oracle baasil, millele see väide tugineb. Huviline saab katsetust ise läbi viia ja täiendavaid päringuid koostada.
PostgreSQLi puhul tuli siiski välja üks puudus - ühe katsetatud päringu korral oskas PostgreSQL
tabeli elimineerimise teisendust teha siis, kui kasutati LEFT JOIN'i, kuid mitte siis kui kasutati INNER JOIN'i.
Soovitan selles olukorras siiski kasutada INNER JOIN operatsiooni.
- Kood on lugejale lihtsamini mõistetav.
- Kontseptuaalselt küsib LEFT JOIN rohkem andmeid kui INNER JOIN. Kui selliseid andmeid pole vaja või ei saa esineda, siis ei maksa neid küsidagi.
- Koodi ülekanne teistesse süsteemidesse tekitab vähem probleeme.
- Mitte kõik andmebaasisüsteemid ei pruugi osata aru saada sellest, et kuigi need laused näevad erinevad välja, annavad need alati sama tulemuse ja seega võiks neil olla sama täitmise protseduur (lugege näiteks seda arutelu).