Forum » Programiranje » [SQL] počasna poizvedba
[SQL] počasna poizvedba
svetovid ::
Zdravo,
napisal sem poizvedbo katera prejme datum, spremenjen ip v decimalke in orginalen ip. Iz baze želim dobiti longitude ,latitude ter število dostopov.
Ampak imam problem da je v bazi preko 400000 podatkov in je ta poizvedba zelo počasna, prosim če mi da kdo kakšen nasvet kako pohitriti zadevo :)
lp
napisal sem poizvedbo katera prejme datum, spremenjen ip v decimalke in orginalen ip. Iz baze želim dobiti longitude ,latitude ter število dostopov.
SELECT DISTINCT GEOIP_LOC.LATITUDE, GEOIP_LOC.LONGITUDE, COUNT(LOGFILE.ID) AS ŠT_DOSTOPOV FROM GEOIP_LOC INNER JOIN GEOIP_BLOCK ON GEOIP_LOC.ID = GEOIP_BLOCK.LOCID CROSS JOIN LOGFILE WHERE (@od <= LOGFILE.TIMESTR) AND (LOGFILE.TIMESTR <= @do) AND (@sprip BETWEEN GEOIP_BLOCK.STARTIP AND GEOIP_BLOCK.ENDIP) AND (LOGFILE.CLIENT_IP = @orgip) GROUP BY GEOIP_LOC.LATITUDE, GEOIP_LOC.LONGITUDE
Ampak imam problem da je v bazi preko 400000 podatkov in je ta poizvedba zelo počasna, prosim če mi da kdo kakšen nasvet kako pohitriti zadevo :)
lp
- spremenilo: svetovid ()
zavajon ::
Po mojem ti tukaj niti indexi ne bodo pomagali, ker uporabljaš CROSS JOIN.
Ta ti vrne kartezični produkt, torej št.recordov prve tabele krat št. recordov druge tabele. Če je tabela LOGFILE res log tabela, zna ta rasti kar hitro.
Glede na to, da ti iščeš število dostopov iz LOGFILE, bi bil po mojem INNER JOIN čisto ustrezen. Pa najbrž imaš kakšno polje, s katerim bi lahko joinal.
Ta ti vrne kartezični produkt, torej št.recordov prve tabele krat št. recordov druge tabele. Če je tabela LOGFILE res log tabela, zna ta rasti kar hitro.
Glede na to, da ti iščeš število dostopov iz LOGFILE, bi bil po mojem INNER JOIN čisto ustrezen. Pa najbrž imaš kakšno polje, s katerim bi lahko joinal.
svetovid ::
Po mojem ti tukaj niti indexi ne bodo pomagali, ker uporabljaš CROSS JOIN.
Ta ti vrne kartezični produkt, torej št.recordov prve tabele krat št. recordov druge tabele. Če je tabela LOGFILE res log tabela, zna ta rasti kar hitro.
Glede na to, da ti iščeš število dostopov iz LOGFILE, bi bil po mojem INNER JOIN čisto ustrezen. Pa najbrž imaš kakšno polje, s katerim bi lahko joinal.
Sem preveril, če bi lahko uporabil inner join ampak ne, nimam nobenega atribtura s katerim bi lahko joinau. Mislim da bi se dalo spremeniti okrog between stavka oz. < = in > = ampak sem brez idej...
Če želim obdelati vse podatke mi program vrne izjemo da je Timeout na poizvedbi. Zdaj jih obdelujem po urah. Več kot 4 ure na enkrat negre.
Zgodovina sprememb…
- spremenilo: svetovid ()
zavajon ::
A po IP ne moreš joinat?
Če ne moreš povezati GEOIP_LOC in LOGFILE, ne boš mogel nikakor dobiti števila dostopov po GEOIP_LOC.LATITUDE, GEOIP_LOC.LONGITUDE
Če ne moreš povezati GEOIP_LOC in LOGFILE, ne boš mogel nikakor dobiti števila dostopov po GEOIP_LOC.LATITUDE, GEOIP_LOC.LONGITUDE
svetovid ::
V logfile je client_ip (navaden ip naslov), v GEOIP_BLOCK imam startip in endip ter locid. Ta locid je povezan z id v GEOIP_LOC. Tako da mi mora program pretvoriti navaden ip naslov v decimalnega.
Aja poizvedba mi vrača pravilne podatke samo zelo zelo počasi.
Aja poizvedba mi vrača pravilne podatke samo zelo zelo počasi.
Zgodovina sprememb…
- spremenilo: svetovid ()
zavajon ::
Potem pa poskusi z dodajanjem indexov na:
LOGFILE.TIMESTR
LOGFILE.CLIENT_IP
GEOIP_LOC.ID
GEOIP_BLOCK.LOCID
LOGFILE.TIMESTR
LOGFILE.CLIENT_IP
GEOIP_LOC.ID
GEOIP_BLOCK.LOCID
alexa-lol ::
jah namesto O(n) imas O(log n) za iskanje... in če imaš 400 000 se že pozna... je pa malo bolj zamudno dodajanje (O(log n))
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Google Street View zbiral podatke o brezžičnih omrežjihOddelek: Novice / Zasebnost | 6901 (5946) | poweroff |
» | Hulu blokira VPN-jeOddelek: Novice / Omrežja / internet | 5121 (3819) | ahac |
» | Prepoved za ogled spletne strani le nekaterimOddelek: Programiranje | 1145 (1087) | fiction |
» | Lociranje in usmeritev obiskovalca glede na državoOddelek: Izdelava spletišč | 1521 (1231) | Loki |
» | Spletni servis za statistikoOddelek: Izdelava spletišč | 2035 (1940) | bradek |