Máme príkaz SELECT, ktorý bude trvať približne. 3 sekúnd na vykonanie. Tento dopyt DB2 voláme vo vnútri vnorenej slučky While.
ex:
Kým (hashmap1.hasNext ()) { zatiaľ čo (hashmap2.hasNext ()) { SQL Query } }
Problém je, že vonkajšia slučka bude spustenápribližne. 1200 krát a vnútorná Keď sa slučka vykoná 200 krát. Čo znamená, že SQL sa nazýva 1200 * 200 = 240 000 krát. Približne. každá iterácia okruhu Outer While bude trvať 150 sekúnd. Takže 1200 * 150 sekúnd = 50 hodín.
Môžeme si dovoliť len asi 12-15 hodín, než začneme ďalší proces.
Existuje nejaký spôsob, ako tento proces urobiť rýchlo? Všetky nové technológie, ktoré nám môžu pomôcť pri získavaní týchto záznamov rýchlejšie z DB2.
Akákoľvek pomoc by bola vysoko cenená.
Poznámka: Už sme sa zaoberali všetkými možnými spôsobmi, ako znížiť počet opakovaní.
odpovede:
4 pre odpoveď č. 1Znie mi to, akoby ste sa pokúšali používať strednú vrstvu pre niečo, čo je vhodnejšie pre samotnú databázu. Je to klasický problém s dotazom "N + 1".
Prepísal (a) túto logiku, aby sa spustil úplne nadatabázy ako správne indexované JOIN. To, že nielenže obmedzíte všetky tieto siete tam a späť, ale prinesie optimalizáciu databázy a ušetrí vám tak náklady spojené so spracovaním všetkých údajov na strednú vrstvu.