Autor Zpráva
Pavlínka
Profil
Dobrý den,
snažím se pro svůj graf vytvořit data s hodnotama za rok zpět...
bohužel výpis 1 000 000 záznamů je pro mysql moc a načítání je dlouhé.
Napadlo mě, vypsat z dat pouze každý 5. řádek, pro účely grafu by dat bylo dostatek ale nevím jak složit mysql příkaz tak aby vypisoval každý pátý řádek...

Vlastně ani nevím zda to je vhodné řešení a odlehčím tím mysql... :D
předem děkuji za rady jak nejlépe takové množství dat z databáze vypsat

Děkuji za rady...
juriad
Profil
Často se to dělá tak, že se starší data agregují.

select date(datum), avg(hodnota) 
from tabulka 
group by date(datum) 
order by 1

Už tento dotaz ti vrátí jen 365 řádků za rok. Podobně můžeš agregovat třeba po hodinách:

select date(datum), hour(datum), avg(hodnota) 
from tabulka 
group by date(datum), hour(datum) 
order by 1, 2

Někdy dává smysl získat minimální/maximální hodnotu či sumu za daný interval.

Tento dotaz pořád může být pomalý. Pak by dávalo smysl data přelít do jiné tabulky, která je již agregovaná a třeba jen nová data mít v plné hustotě. Tuto agregaci můžeš spouštět ručně, když ti přijde aplikace pomalá, nebo automaticky třeba každý měsíc. Samozřejmě data nemusíš okamžitě mazat, pokud máš index, tak může být i parciální agregace rychlá.

insert into historie 
select date(datum), avg(hodnota) 
from tabulka 
where datum < '2022-07-01' 
and datum >= '2022-01-01' -- pokud bys nechtěla původní data mazat, musíš agregovat jen úsek od posledně
group by date(datum);

delete from tabulka 
where datum < '2022-07-01';

Kombinovaný dotaz, který získá data z obou tabulek pak vypadal takto:
select * 
from historie 
union all 
select date(datum), avg(hodnota) 
from tabulka 
where datum >= '2022-07-01' -- pokud bys nechtěla původní data mazat, použiješ tuto podmínku
group by date(datum) 
order by 1
Kajman
Profil
Pokud je to novější verze mysql, která umí analytické window funkce, tak lze vynechat řádky, kde je předešlá i následující teplota stejná. Pak budete mít jen schody se změnami. Pokud máte starou verzi, tak to filtrování můžete udělat v aplikaci, kde chystáte data pro graf.

Většinou nebývá problém s milionem záznamů v db, ale až se zpracováním grafu s tolika body.

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:

0