Kodulehed
[386] - Andmebaasid I (ITI0206) (kevad 2024)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid
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 / SQL

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Anonüümne (17.03.2024 17:09):
Kas Count(1) ridade arvu loendamiseks on kiirem kui Count(*)?
Vastus (17.03.2024 17:54): Oletame, et SQL-andmebaasis on tabel:

Isik(isikukood, perenimi)
Primaarvõti (isikukood)

Lause

SELECT Count(*) AS arv
FROM Isik;

leiab tabelis Isik olevate ridade arvu. Kui Count funktsiooni poole pöörduda nii: Count(<avaldis>), siis leitakse selliste ridade arv, mille korral avaldise väärtus ei ole NULL.

SELECT Count(1) AS arv
FROM Isik;

Ühegi rea korral tabelis Isik ei ole sulgudes oleva avaldise väärtuse arvutamise tulemus NULL - seega tulemus on sama nagu eelmisel päringul. Need kaks lauset on seega loogiliselt samaväärsed. Võiks arvata, et nende lausete täitmise protseduur (täitmisplaan) ja seega täitmise kiirus on ühesugused. Enamikes andmebaasisüsteemides see ongi nii. Kuid nagu kirjutatakse SIIN, siis PostgreSQLis on Count(*) kasutava päringu täitmine kiirem kui Count(1) kasutava päringu täitmine.

Katsetasin seda PostgreSQL (16) andmebaasis tabeli (hcv) põhjal, kus on üks miljon rida. Kasutasin töökiiruse leidmiseks EXPLAIN ANALYZE lauset, mille käivitamise korral näeb kasutaja lause täitmise plaani ja ka lause täitmiseks kulunud aega. Käivitasin neid lauseid vaheldumisi viis korda ja leidsin kummagi lause korral täitmisaegade geomeetrilise keskmise.

Lause 1: EXPLAIN ANALYZE SELECT Count(*) AS arv FROM Hcv;
Lause 2: EXPLAIN ANALYZE SELECT Count(1) AS arv FROM Hcv;

Count(*): geomeetriline keskmine 69.1 ms
Count(1): geomeetriline keskmine 76.1 ms

Minu katsetus seega kinnitas seda väidet, kuid töökiiruse erinevused on kasutajale vähemärgatavad.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!