Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 8. 12. 2021, 10:09:23
Zdravim,
mam problem s rychlostou, kedze mam zle postaveny doataz na databazu. Mam plan vyroby (tabulka PLAN), kde mam hotovy produkt, ktory sa sklada z nejakych komponent. (tabulka BOM) , pokial dam povyberat len na tomto zaklade, tak je dotaz rychly, cca 0.08-0.1s s podmienkami na datum, ak dam select vsetkeho bez podmienok na Datum alebo Group BY, cca 1714 zaznamov, a cas cca 0.8s Tabulka PLAN ma cca 200 zaznamov /pravdepodobne bude vzdy max. taka velka, cca mesiac naplanovany dopredu/, tabulka BOM /bill of materials/ ma tych zaznamov cca 61 000. SELECT p.`Č. položky`, p.mnozstvo,p.urobene, b.MJ, b.Popis_komponentu, b.Komponent AS komponent, b.mnozstvo AS mnozstvonakus, ((p.mnozstvo-p.urobene)*b.mnozstvo) AS mnoztvoALL FROM plan p JOIN bom b ON b.Č_nadradenej_položky = p.`Č. položky` where b.`Č_alternatívy` = '*' AND b.`Typ_štruktúry` = 'Výroba' And ((p.mnozstvo-p.urobene) != '0' or (p.mnozstvo-p.urobene) < '0') AND b.Platnosť_do = '' AND komponent LIKE 'W%' Group by komponent Order by komponent DESC; Problem je, ze potrebujem aj vypist kategoriu toho komponentu, ktory dostavam z tabulky BOM. Tie su ulozene v tabulke kategoria_produkt, ktora ma 4000 zaznamov. Ked pridam tuto tabulku do predchadzajuceho selectu SELECT p.`Č. položky`, p.mnozstvo,p.urobene, b.MJ, b.Popis_komponentu, b.Komponent AS komponent, b.mnozstvo AS mnozstvonakus, ((p.mnozstvo-p.urobene)*b.mnozstvo) AS mnoztvoALL, k.kategoria FROM plan p JOIN bom b ON b.Č_nadradenej_položky = p.`Č. položky` JOIN kategoria_produkt k ON k.`Č. položky` = b.komponent where p.Datum = '2021-11-22' AND b.`Č_alternatívy` = '*' AND b.`Typ_štruktúry` = 'Výroba' And ((p.mnozstvo-p.urobene) != '0' or (p.mnozstvo-p.urobene) < '0') AND b.Platnosť_do = '' AND komponent LIKE 'W%' Group by komponent Order by komponent DESC Tato cast JOIN kategoria_produkt k ON k.`Č. položky` = b.komponent Pravdepodobne to hlada ako 200x61000x4000 riadkoch? Zatial som to dal, ze si vytiahnem vsetko z toho prveho selectu PLAN a BOM a potom pri vypise si urobit dalsi select cisto len na tabulku kategoria_produkt kde si vyberam WHERE Č. položky = $row_nakup_all['komponent'] Ako vylepsit ten Select aby som to mohol mat v tom jednom dotaze na DB, alebo to robit cez tie dva, tak sa to ma robit normalne? Dakujem. |
||
Kajman Profil |
#2 · Zasláno: 8. 12. 2021, 10:56:17
Jaké jsou struktury tabulek včetně indexů? Jaký je explain dotazu?
|
||
anonym_ Profil * |
#3 · Zasláno: 8. 12. 2021, 10:59:37
Andrej.B:
„Pravdepodobne to hlada ako 200x61000x4000 riadkoch?“ JOIN přes 3 tabulky s pár řádky je běžný a určitě nemá trvat déle jak pár ms. I těch 2-5s je minimálně o řád více, než by to mělo v těchto počtech řádků být. |
||
Andrej.B Profil |
#4 · Zasláno: 8. 12. 2021, 11:44:28
Kajman:
„Jaké jsou struktury tabulek včetně indexů? Jaký je explain dotazu?“ Preco Vas nemam vedla seba? Chybal Index na tom komponente v BOM, blbec. uz je to ok. Pri nahravani novych dat, obcas blbnem s update v aplikacii a chcem zase predchadzajuce neporusene data, som si neuvedomil, ze tie nemaju Index. Uz mam zalohovane data s indexami. Dakujem |
||
Časová prodleva: 2 roky
|
0