Cytat
Puki co staram się ujarzmić kilka zapytań jednocześnie
Z racji, ze przeprowadzilem sobie wewnetrzny test, to masz juz gotowy kod:
<?php
$sql = 'select count(*) from city_city';
$count = $row[0];
$coIle = round($count/100000
); echo 'Ilosc wszystkich rekordow:'.$count; echo '<br />Co ile:'.$coIle; from (select
@nr:=@nr+1 _nr,
city_city.*
from city_city) jakisalias
$i=0;
//tu cos sobie rob z rekordem
$i++;
}
echo '<br />Ilosc przetworzonych rekordow:'.$i; ?>
A oto wynik:
Ilosc wszystkich rekordow:6359961
Co ile:64
Ilosc przetworzonych rekordow:99375
Czas 7.34749293327
A tutaj kod w wersji maly_swd:
<?php
$coIle = round($count/100000
); echo 'Ilosc wszystkich rekordow:'.$count; echo '<br />Co ile:'.$coIle;
$poz = 0;
$i=0;
$poz+=$coIle;
$i++;
}
echo '<br />Ilosc przetworzonych rekordow:'.$i; ?>
I wynik:
Ilosc wszystkich rekordow:6359961
Co ile:64
Fatal error: Maximum execution time of 990 seconds exceeded
Jak widac tabela ma ponad 6 mln rekordow.
Dla mojej wersji skrypt wykonywał sie 7 sekund. Procesy systemowe w normie, podkoczyl jedynie troche proces mysql ale nie zuzywal wcale wiecej pamieci niz normalnie.
Dla wersji malego skrypt wykonywal sie koszmarnie dlugo. Proces apachea wskoczyl mi na maxa i zajął ponad 300MB pamieci.
Dodatkowo nie doczekalem sie na wynik. Musialem sztucznie zwiększyc $coIle na 20000 by doczekac sie wyniku. Oto on:
Ilosc wszystkich rekordow:6359961
Co ile:20000
Ilosc przetworzonych rekordow:317
Czas 20.1107699871
PRzykladowo moj skrypt dla tej wartosci $coIle uzyskal nastepujace wyniki
Ilosc wszystkich rekordow:6359961
Co ile:20000
Ilosc przetworzonych rekordow:318
Czas 7.14381098747
Wnioski: no chyba nie musze mowic....

@maly_swd jesli naprawde myslales o innym rozwiązaniu to prosze podaj je dokladnie. Jesli jednak nie, to moze wkoncu przyjmiesz fakty do wiadomosci.
edit:
a, i jeszcze wyniki moich wczesniej podanych skryptow dla tej samej tabeli z 6 mln rekordow
czas dla select count(*): 0.00517010688782
czas dla mysql_num_rows: 6.46986794472
no comments....