Egymillió rekordos adatbázis lekérdezésnél hibát dob az oldal (PHP memória limit). Azon kívül, hogy a PHP limitet növelem, van-e más megoldás? Részletek lent.
Valószínű nem a lekérdezéssel van a gond, hanem az adatok feldolgozásával. Ha a lekérdezés minden sorát elkezded egy tömbben letárolni, majd a tömbbel dolgozol tovább, akkor persze, hogy el fog szállni memóriatúllépéssel. Valahogy meg kell oldani, hogy ne kelljen a már feldogozott rekordot tárolnod, így a lekérdezésből mindig csak az aktuális sort kéred le és dolgozod fel. Még jobb, ha maga a lekérdezés van úgy összeállítva, hogy nem a nyers, hanem a kívánt adatokat kérdezze le.
Egy lekérdezés akkor szokott időtúllépéssel elszállni, ha kellően sok rekord van az adattáblában, és olyan mező alapján próbálsz szűrni, sorba rendezni, amely mezőre nincs külön index. Ha session azonosítóra van egy feltételed, akkor a session azonosítót tároló mezőre célszerű külön indexet definiálni az adattáblában. Egy hasonlattal élve olyan ez, mint mikor a könyvtárban mondjuk azokat a könyveket akarod kiválasztani, amelyek az „Programozás” szóval kezdődnek. Ha nincs semmiféle segítséged, akkor végig kell bogarásznod az összes könyvet, hogy ki tudd választani a programozás szóval kezdődő címeket. Ha viszont van egy cím alapú katalógusod, ahol a cím alapján vannak sorba rendezve a könyvek, akkor ott könnyen – intervallumfelezéssel – megtalálod az első és az utolsó programozás szóval kezdődő könyvet, kivéve ezt a pár száz katalóguscédulát, már könnyebben ki tudod keresni a könyvtárból azt a pár száz könyvet, aminek a cím ezzel a szóval kezdődik.
De így adattábla szerkezet és forráskód nélkül sokkal többet nem lehet erről mondani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!