Napravio sam upit koji to radi, a radi jako brzo iz tabele izvštaja sa preko milion slogova, medjutim... EXPLAIN daje sledeće:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY L ref KorisnikID,Aktivan Aktivan 1 const 144 Using where; Using temporary; Using filesort
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 182
2 DERIVED <derived3> ALL NULL NULL NULL NULL 182
2 DERIVED S eq_ref PRIMARY PRIMARY 4 M.MaxIzvestajID 1
3 DERIVED izvestaji range DatumVreme DatumVreme 8 NULL 388 Using where; Using temporary; Using filesort
Upit je:
SELECT L.KorisnikID, L.Mesto, L.Naziv, R.IzvestajID, R.Uplata, R.Isplata, R.DatumVreme
FROM korisnici L LEFT OUTER JOIN
(SELECT IzvestajID, Uplata, Isplata, DatumVreme, KorisnikID
FROM izvestaji S INNER JOIN
(SELECT MAX(IzvestajID) AS MaxIzvestajID
FROM izvestaji
WHERE DatumVreme BETWEEN '2008-01-15 07:00' AND '2008-01-15 23:59'
GROUP BY KorisnikID) M
ON S.IzvestajID = M.MaxIzvestajID) R
ON L.KorisnikID = R.KorisnikID
WHERE L.KorisnikID BETWEEN 1 AND 100 AND L.Aktivan = 1
ORDER BY L.Mesto, L.Naziv
Problem je što ovaj upit, iako radi i radi brzo, uvećava MySQL Select_full_join vrednost, za koju u opisu piše:
Select_full_join - The number of joins that do not use indexes. If this value is not 0, you should carefully check the indexes of your tables.
Za tabelu korisnici imam indekse po KorisnikID (PK), Mesto, Naziv, Aktivan, a za tabelu izveštaji po IzvestajID (PK), DatumVreme, KorisnikID. Pretpostavljam da se iz istog razloga uvećavaju i Handler_read_rnd i Handler_read_rnd_next, a svi indeksi su sigurno dobri. Šta može biti problem ili problema uopšte i nema?
