Autor | Zpráva | ||
---|---|---|---|
siginigin Profil * |
#1 · Zasláno: 18. 1. 2010, 16:27:26
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 |
#2 · Zasláno: 18. 1. 2010, 16:44:34
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 |
#3 · Zasláno: 18. 1. 2010, 18:49:56
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 * |
#4 · Zasláno: 18. 1. 2010, 21:42:36
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 |
#5 · Zasláno: 18. 1. 2010, 22:33:08
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 |
#6 · Zasláno: 19. 1. 2010, 08:21:07
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 * |
#7 · Zasláno: 19. 1. 2010, 09:21:27
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 |
#9 · Zasláno: 19. 1. 2010, 09:44:33
siginigin:
„hmm, taka malickost...super, velka vdaka za radu“ mimochodem se tě na to pokusil navést už ninja v [#3] |
||
Časová prodleva: 14 let
|
0