Mam dwie tabele, jedna skaladajaca sie (do tej pory) z okolo 50000 rekordow, struktura:
CREATE TABLE `email_confirm` ( `id` int(3) NOT NULL AUTO_INCREMENT, `no` varchar(100) NOT NULL, `email` varchar(100) NOT NULL', `date` datetime NOT NULL, `ver` varchar(6) NOT NULL, PRIMARY KEY (`id`), KEY `no` (`no`), KEY `email` (`email`) ) ENGINE=MyISAM;
A tu druga tabela, zawierajaca kilkanascie rekordow, w ktorej wpisuje ile maili zostalo wyslanych:
CREATE TABLE `email_confirm_sent` ( `id` int(3) NOT NULL AUTO_INCREMENT, `no` varchar(100) NOT NULL, `quantity` int(10) NOT NULL, PRIMARY KEY (`id`), KEY `no` (`no`), KEY `quantity` (`quantity`) ) ENGINE=MyISAM;
I teraz zapytanie, ktore grupuje wszystkie wyslane maile, laczy sie z druga tabela i na tej podstawie moge wylicz procent otwarte/wyslane:
SELECT email_confirm.no, COUNT(email_confirm.no) AS counts, quantity FROM email_confirm LEFT JOIN email_confirm_sent ON email_confirm.no = email_confirm_sent.no WHERE email NOT LIKE '%spa.pl' GROUP BY email_confirm.no HAVING counts > 10
I problem w tym, ze ten kochany LEFT JOIN opoznia generacje wynikow do okolo 40sek.
Mozna to jakos zoptymalizowac?