Juhul kui välisühendamist ei ole lause õige tulemuse saavutamiseks vaja, siis kas OUTER JOIN operatsiooni kasutamine INNER JOIN asemel mõjutab lause täitmisplaani valikut ja seega ka lause täitmise kiirust?

Postitas Erki Eessaar 11.11.2021 17:30
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).

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!