Autor | Zpráva | ||
---|---|---|---|
JardaB Profil |
#1 · Zasláno: 18. 4. 2019, 08:34:20
Zdravím,
potřebuji navrhnout strukturu tabulky a poradit jak provádět správně update jednotlivých záznamů. Uvedu na hodně zjednodušeném příkladu. nyní používám tyto dvě tabulky: rybniky: id, uzivnost.. obsadka: id, uzivnost, vek, prirustek ... První tabulka obsahuje udaje o vodní ploše a její úživnosti Do tabulky dvě zapíšu všechny ryby které tam jsou včetně úživnosti z tabulky1 a poté co měsíc provedu update, který modifikuje hromadně záznamy dle vzorce a zapíše přírůstky. Jelikož bude v tabulce dvě až 50M záznamů, tak ji chci optimalizovat. Především v tabulce dvě je myslím zbytečný údaj uzivnost, protože jej mám k dispozici v hlavní tabulce. Jenže když jej odeberu, tak nevím jak přesně napsat dotaz pro hromadné udate, kde se využívá ve vzorci prave uzivnost. Nyní používám podobný dotaz, který počítá že v tabulce dvě je hodnota uzivnost. Jak napsat dotaz, který vezme údaj z tabulky jedna? Tím bych zmenšil velikost výsledné dtb a uživnost bych nemusel uvádět u každé ryby, když je pro dané id vodní plochy stejná. UPDATE obsadka SET delka = delka + (365/vek*uzivnost/12) WHERE cron < $info[mesic] ORDER BY cron ASC LIMIT 10000"); |
||
Kajman Profil |
#2 · Zasláno: 18. 4. 2019, 09:23:22
Jestli všechny druhy ryb rostou stejně rychle, tak něco takového...
UPDATE obsadka o JOIN rybniky r ON o.id_rybnik=r.id SET o.delka = o.delka + (365/o.vek*r.uzivnost/12), o.cron = now(), # nebo neco takoveho o.vek = o.vek + ??? WHERE o.cron < $info[mesic] ORDER BY o.cron ASC LIMIT 10000 Ale nejsem si jístý, jestli půjde takto kombinace joinu s order by a limitem. Kdyby to takto nešlo, tak bych ještě zkusil join na poddotaz, který z rybníků vyzobne jen těch 10000 a order by s limitem se tedy přesune tam. UPDATE obsadka o JOIN ( SELECT o2.id FROM osadka o2 WHERE o2.cron < $info[mesic] ORDER BY o2.cron ASC LIMIT 10000 ) o3 ON o.id=o3.id JOIN rybniky r ON o.id_rybnik=r.id SET o.delka = o.delka + (365/o.vek*r.uzivnost/12), o.cron = now() # nebo neco takoveho Ale osobně bych si nechal v tabulce osadka vždy původní délku, původní věk a datum, kdy byly tyto hodnoty platné. Pak bych si počítal (možná do jiné tabulky) hodnoty do sloupečků vek_aktualni, delka_aktualni dle původních údajů, pokud je to opravdu potřeba mít předpočítané a není to možné počítat přímo v dotaze. |
||
JardaB Profil |
#3 · Zasláno: 18. 4. 2019, 09:58:24
Kajman:
Bohužel každá ryba poroste jinak. K tomu slouží parametr přírustek a ten chci aby byl u každé ryby jiný byť jde o stejný druh. Ale napadlo mne propočítat souvislost úživnost vs přírůstek a uložit ji jako koeficient. Tím bych neměl úživnost ani přírustek, ale jen jeden sloupec koeficient. Netuším totiž, jak budou vaše složité dotazy svižné oproti mým.. |
||
Kajman Profil |
#4 · Zasláno: 18. 4. 2019, 18:13:29
Svižnost si můžete jednoduše vyzkoušet na testovacích datech.
|
||
Časová prodleva: 6 let
|
0