Autor Zpráva
siginigin
Profil *
zdravim,
stale som na to neprisiel tak to tu napisem: mam tabulku o velkosti 65536 zaznamov - obsahuje IP adresy - tie potrebujem vypisat vsetky. potom mam druhu tabulky registracii, ta obsahuje asi 700 zaznamov, 1 registracia k 1 ip adrese. cize chcem tabulku vsetkych ip adries a ich registracii, pokial existuju.
takze som zvolil left join asi takto:
select * from subnet1 left join registracie on subnet1.ip = registracie.ip

problem je to ze to trva tak dlho, ze php po 300 sekundach ukonci vykonavanie skriptu. na vypis celej siete by bolo treba ~1.38hodiny. zda sa mi to "trosku" vela. subnet1 ma primarny index ip, registracie maju primarny index id, ale prepojene su cez ip. mam zmazat registracie.id a vytvorit primarny kluc registracie.ip? a co by sa dalo nastavit v apachovi aby tio bolo rychlejsie?
vdaka za radu.
Joker
Profil
siginigin:
A není problém spíš v tom skriptu, než v tom databázovém dotazu?
Když si zkusíte pustit samotný ten databázový dotaz (nejlépe někde, kde to pak napíše dobu běhu dotazu), jak dlouho to trvá?
ninja
Profil
siginigin: Jaký datový typ je sloupec IP? A má na sobě v tabulce registrace index?

Jinak jak píše Joker, toto by měla databáze vysypat max za pár vteřin.
siginigin
Profil *
Joker:
no to som nemeral, kolko to trva, ale urobil som uplne najjednoduchsi skript aky som vedel - iba hlavicka a vysledna tabulka a tento trval tak dlho...skusim to zmerat bez vypisu klientovi...

ninja:
IP je varchar(15) v oboch tabulkach. v subnet1 je IP sucasne primarnym klucom a v registracie je primarny kluc ID, automaticky inkrementovany

urobil som urcitu obchadzku tohto problemu a to tak, ze na pozadi stranky sa ajaxom odosielaju postupne poziadavky na dalsich 30 zaznamov ohranicene limitom v selecte. funguje to. je to pekne. ale pomale :(
mattyZEM
Profil
SQL příkaz nemůže trvat 1.38 hodiny..

Já měl log lognutí (IP a takový blbiny), nějakých 450K záznamů a vypsáno hnedka, to samé zmazáno :)
nightfish
Profil
mattyZEM:
SQL příkaz nemůže trvat 1.38 hodiny..
to není tak úplně pravda

siginigin:
přidej index na sloupci registracie.ip
siginigin
Profil *
no takze definitivne je nieco s mysql serverom:
   $StartTime = microtime(true);
   $sql = "select * from subnet_97 left join registracie on subnet_97.ip = registracie.ip";
   mysql_query($sql) or die("chyba 1.sql= $sql: ".mysql_error());
   $EndTime = microtime(true);
   $time = round($EndTime-$StartTime,4);
   echo "sql trval $time s"; 


subnet_97 ma 256 zaznamov. sql trval 6,61 sekund. ked som dal subnet, v ktorom je 65536 zaznamov, tak mysqld_nt.exe proces zobral 100% procesora a server som musel restartnut. neviete, ako osetrit aby hociaka zle napisana webaplikacia nemohla zahltit server?
siginigin
Profil *
nightfish:
pridal som index na registracie.ip - sql trval 0.0102s, subnet so 65536 zaznamami 2.82s. hmm, taka malickost...super, velka vdaka za radu.

uz len ako nastavit mysql aby ho nezahltila aplikacia? nejaky druh bezpecneho rezimu pre kazdy z 255 threadworkerov...

Moderátor nightfish: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.

Moderátor nightfish: Nepoužívej prosím 3 písmena "m" po sobě, používají se zde k přivolání moderátora.
nightfish
Profil
siginigin:
hmm, taka malickost...super, velka vdaka za radu
mimochodem se tě na to pokusil navést už ninja v [#3]

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: