Kodulehed
[383] - Andmebaasid II (ITI0207) (sügis 2022)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Abi
Lisainfo Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Abi / Kasutajatugi / Andmebaasisüsteemid (Üldine)

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

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

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!