2011-09-15 10 views
6

Mam kilka oświadczeń SELECT na stronie PHP, a ja użyłem Dreamweaver do ich wygenerowania.mysql_num_rows() php - czy to jest wydajne?

Po przejściu generowanego kodu wydawało się, że jest dużo kłaczków, które mogłem wyciąć w większości przypadków, dla każdego stwierdzenia będącego przykładem.

Zastanawiam się, czy ktoś może mi powiedzieć, czy faktycznie to oszczędza zasoby - biorąc pod uwagę, że zapytanie jest uruchamiane bez względu na to, czy istnieje jakiekolwiek dodatkowe obciążenie?


UPDATE: Po wykonaniu sugestię Chriszuma chodzi o microtime, oto moje wyniki:

//time before running the query 
1: 0.46837500 1316102620 

//time after the query ran 
2: 0.53913800 1316102620 

//time before calling mysql_num_rows() 
3: 0.53914200 1316102620 

//time after mysql_num_rows() 
4: 0.53914500 1316102620 

więc nie wiele napowietrznych w ogóle, to wydaje

+0

W PHP jest zawsze narzut na wywołanie funkcji, ale zwykle jest to minimalne, chyba że dzwonisz do niego setki tysięcy razy ... – DaveRandom

Odpowiedz

3

Spodziewam się, że takie połączenie będzie mają bardzo minimalny wpływ na wydajność. Jest to po prostu zliczanie wierszy jego wewnętrznie zapisanego wyniku zapytania. Samo zapytanie SQL zajmie ogromną większość czasu przetwarzania.

Jeśli chcesz wiedzieć na pewno, możesz wykonać microtime() przed i po zakończeniu połączenia, aby zobaczyć, ile czasu zajmuje.

$startTime = microtime(true); 
mysql_num_rows(); 
$time = microtime(true) - $startTime; 
echo("mysql_num_rows() execution: $time seconds\n"); 

Podejrzewam, że zobaczysz coś w zakresie mikrosekund.

+1

to działało, chociaż wykonałem szybki i brudny test podczas pisania kodu, więc zwane tylko mikrotime() samo za każdym razem :) – jammypeach

4

mysql_num_rows() zlicza wiersze po zostały pobrane. To tak, jakbyś pobrał wszystkie wiersze i zapisał je w tablicy PHP, a następnie uruchomił count($array). Ale mysql_num_rows() jest zaimplementowany w C w bibliotece klienta MySQL, więc powinien być nieco bardziej wydajny niż równoważny kod PHP.

Pamiętaj, że aby funkcja mysql_num_rows() mogła działać, musisz mieć pełny wynik zapytania w pamięci PHP. Tak więc istnieje nadmiar w tym sensie, że zestaw wyników zapytania może być duży i zajmować dużo pamięci.

+1

+1 Dlatego 'mysql_num_rows' nie będzie działać, gdy używasz [mysql_unbuffered_query] (http://php.net/manual/en/function.mysql-unbuffered-query. php) – webbiedave