Optimalizace Mysql query rubrika: Databáze: SQL
Ahoj,
trochu jsem se zasekl a potřeboval bych poradit.
Mam poměrně jednoduchou query nad MySQL:
select COUNT(DISTINCT email), event from log
where article_id
= 9 group by event
15834 click
41000 read
.....
Čímž získám počet unikátních přečtení / kliknutí na článek, jenomže prý je v Mysql bug a tahle query zabere na tabulce s milionem zázanmů asi 12 vteřin (email, event i article_id je indexováno).
"Select count(distinct somefield) from sometable is very slow in all versions of mysql.
The distinct part is equivalent to:
select somefield from sometable group by somefield
although the latter sometimes runs even faster than distinct. To get reasonable speed under mysql5, please use this equivalent which uses a subquery:
select count(*) from (select distinct somefield from sometable group by somefield) as somelabel;
This is quite speedy.
(I don't know why count distinct is so slow when distinct itself isn't that slow.)"
Nevíte jak podobnou query optimalizovat aby byla rychlejší?
Díky za rady.
Ty jo, jsem netušil, že je na tom MySQL tak zle. Ale v tomhle případě bych udělal asi to, že bych si:
- Vytvořil tabulku, která bude obsahovat zobrazovaný výsledek
- V tabulce bude id/časové razítko posledního zpracovaného záznamu
- Pak jsou možné dva scénáře:
- Za chodu se od daného razítka dopočítá zbytek a ten se sečte, aktulizuje se mezitabulka a zobrazí výsledek. Přesná metoda, ale pomalejší na frontendu.
- Pomocí cronu se bude dopočítávat od daného razítka a aktualizovat mezitabulka. A bude se trochu nepřesně zobrazovat výsledek. Rychlé na frontendu
Pro zobrazení všech 9 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře