Autor | Zpráva | ||
---|---|---|---|
Pavlínka Profil |
#1 · Zasláno: 12. 12. 2022, 18:24:32
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 |
#2 · Zasláno: 12. 12. 2022, 20:51:38
Č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 |
#3 · Zasláno: 14. 12. 2022, 18:05:59
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. |
||
Časová prodleva: 1 rok
|
0