Ja sam napisao taj upit na tri nacina, pa me interesuje koji je od njih najbolji, tj koji ce se najbrze izvrsiti ukoliko npr imam 20000 zapisa u tabeli osoba i jedno 500 zapisa u tabeli firma.
Ovo pitam iz razloga sto sam isao na razgovor za posao i to mi je pitanje bilo postavljeno. U tom trenutku mi je palo na pamet prvi nacin, za koji i sam znam da nije najbolji jer ce praviti problem u performansama sa tabelama koje imaju puno zapisa, dok su mi ostala resenja pala na pamet nakon razgovora. Valjda me uhvatila trema, sta znam :)
Da li je drugi ili treci najbolji nacin? Nekako mi drugi nacin deluje kao najefikasniji. Da li sam u pravu?
Da li mozda postoji efikasnije resenje od ova tri?
Ovo su tabele:
mysql> select * from osoba;
+----+--------+-------+
| id | Ime | Firma |
+----+--------+-------+
| 1 | Pera | 1 |
| 2 | Mika | 1 |
| 3 | Laza | 2 |
| 4 | Dragan | 1 |
| 6 | Darko | 4 |
+----+--------+-------+
5 rows in set (0.00 sec)
mysql> select * from firma;
+----+---------+
| Id | Naziv |
+----+---------+
| 1 | Firma 1 |
| 2 | Firma 2 |
| 3 | Firma 3 |
+----+---------+
3 rows in set (0.00 sec)
Prvi nacin:
SELECT naziv, (SELECT COUNT(*) FROM osoba WHERE osoba.firma = firma.id) FROM firma
Drugi nacin:
SELECT naziv, SUM(IF(osoba.firma = firma.id,1,0)) FROM osoba, firma GROUP BY naziv
Treci nacin:
SELECT naziv, COUNT(ime) FROM firma
LEFT JOIN osoba ON osoba.firma = firma.id
GROUP BY naziv
P.S. Nisam primljen i ono sto zelim je da sledeci put zablistam u punom sjaju :)