Kodulehed
[387] - Andmebaasid II (ITI0207) (sügis 2024)
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 / PostgreSQL

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Anonüümne (12.06.2023 13:13):
Kas PostgreSQLis ON DELETE CASCADE kasutamine välisvõtme deklaratsioonis põhjustab halba kustutamise töökiirust e jõudlust?
Vastus (12.06.2023 16:27): Ei tekita.

Põhjendan vastust. Tegin katsetusi PostgreSQL 15 andmebaasis, millel on järgmine kontseptuaalne struktuur:

[Facility]-0..1-----------------0..*-[Health_care_visit]

Tabel Facility: 50 000 rida
Tabel Health_care_visit: 1 000 00 rida

Tabelis Health_care_visit on 6 rida, kus facility_id=200
Tabelis Health_care_visit on indeks veerul facility_id.

Katsetasin kahe ülesande täitmist:
  • Ül1: Kustuta tervishoiuasutus, mille id=200 ja selle asutusega seotud külastused.
  • Ül2: Kustuta kõik tervishoiuasutused ja nende asutustega seotud külastused.

Katsetasin nende ülesanne täitmist kahe andmebaasi disaini korral.
  • D1: Välisvõtme kitsendusega on seotud ON DELETE CASCADE kompenseeriv tegevus. See tähendab, et kustutasin ridu ainult tabelist Facility ja seotud read kustutati kaskaadselt tabelist Health_care_visit.
    • DELETE FROM Facility WHERE facility_id=200;
    • DELETE FROM Facility;
  • D2: Välisvõtme kitsendusel ei ole ON DELETE CASCADE kompenseerivat tegevust. See tähendab, et kõigepealt tuli kustutada read tabelist Health_care_visit ja siis sai kustutada read tabelist Facility.
    • DELETE FROM Health_care_visit WHERE facility_id=200;
      DELETE FROM Facility WHERE facility_id=200;
    • DELETE FROM Health_care_visit;
      DELETE FROM Facility;
Viisin iga ülesande ja disaini paari korral kustutamist läbi viis korda ja leidsin süsteemi kulutatud aja (lausete täitmisplaani koostamine + plaani täitmine) keskmise

Ül1, D1 (ON DELETE CASCADE): 0.94 ms
Ül1, D2 (ON DELETE NO ACTION): 0.77 ms

Ül2, D1 (ON DELETE CASCADE): 4975 ms
Ül2, D2 (ON DELETE NO ACTION): 7409,204 ms

Nagu näha, siis primaarsest tabelist (vanemtabelist) ühe rea kustutamisel oli ON DELETE CASCADE lahendus veidi aeglasem, kuid mõlemad lahendused olid aktsepteeritava töökiirusega.

Primaarsest tabelist (vanemtabelist) kõikide ridade kustutamisel oli ON DELETE CASCADE lahendus palju kiirem, kusjuures operatsiooni läbiviimine võttis mõlemal juhul palju aega.

Kokkuvõttes järeldan, et töökiirus ei peaks olema argument, miks ON DELETE CASCADE mitte kasutada.

NB! Eelnev näide põhineb ühel andmebaasisüsteemi versioonil. Teistes andmebaasisüsteemides või versioonides võivad tulemused olla erinevad.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!