Autor Zpráva
Chuchycek
Profil
Ahoj,
mám takový problém, mám agregovanou tabulku v databázi, mám jí naindexovanou, jenže mám problém se čtením dat z disku, které trvá neúnosně dlouho, když se následně provede sql dotaz a provedu ho znovu, tak je již nacachovaný a trvá v řádech milisekund, chtěl bych vědět, na co se mám v úpravě mysql databáze zaměřit, abych zrychlil vypsání sql.

Ještě doplním, že to dělá problém v dotazech ve kterých používám group nebo agregační funkce a dělá to tedy problém při agregaci cca 250tiscí řádků.
H.
Kajman
Profil
Podívejte se přes explain, zda ten sql dotaz vytvořený index využívá dle očekávání.
Chuchycek
Profil
Kajman:
Jo, používá. To byla první věc, kterou jsem ověřil.

|| 1 || SIMPLE || b || range || d_id || d_id || 4 ||  || 2640 || Using index condition ||

A ani toto mi nedoběhne dříve než za 4 minuty.
Kajman
Profil
Jaký má ten stroj disk a procesor, že agregační funkce nad 2640 řádky trvá 4 minuty? Nebo to není celý explain?

Zkuste sem naspat i konkrétní dotaz a strukturu tabulek včetně indexů.
Chuchycek
Profil
CPU - Intel® Xeon® Processor E5-2665 - 20M Cache, 2.40 GHz
A disky jsou virtuální, takže bohuže nezjistím momentálně, co je za typ, ale měli by to být ssd disky se 100GB.

Co se týče tabulky, tak má 6milionu řádku
select suma from table as b where d_id IN (1, 4, 2, 5, 7, 11,
22, 42, 11, 1) limit 10000

ale věc, co mě osobně zaráží je taková, že explain předpovídá cca 2500 řádků, reálně jich tam je, ale kolem 250 000
Kajman
Profil
Tohle je přesně ten problémový dotaz? Přetím jste psal, že to dělá při použití group by, které tu není.
Chuchycek
Profil
Ano, to je zkrácený...

Jinak

select d_id, sum(suma) from data_table as b where d_id IN (1, 4, 2, 5, 7, 11,
22, 42, 11, 1) GROUP BY d_id
Kajman
Profil
Stále to nevypadá jako konkrétní dotaz.

Obecně není nic divného, že sečtení 250 000 čísel chvíli potrvá. Pokud je to potřeba často, dalo by vytvořit pomocná tabulka, kde budou data pro jednotlivá d_id sečtena a auktualizována díky triggerům nad tabulkou table.
Chuchycek
Profil
Kajman:
Je to konkrétní dotaz, vzhledem k citlivým datům jsem změnil jen názvy. Problém je takový, že ty data už jsou přepořítaná a už se nedají více zmenšit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: