Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Szybkie liczenie wierszy
mastermindssj2
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 21.06.2011

Ostrzeżenie: (0%)
-----


Pracuję nad dość obszerną bazą danych i potrzebuje choć w pewnym stopniu skrócić czas zapytań. Chodzi konkretnie o liczenie ilości zwróconych rekordów. W kilku miejscach wyczytałem, że SQL_CALC_FOUND_ROWS jest szybsze niż COUNT(). Z testów przeprowadzonych przeze mnie wynika co innego, COUNT() jest szybsze. Czy mógłby mi ktoś powiedzieć co robię nie tak? Czy możliwą przyczyną jest np zła konfiguracja bazy danych lub serwera?

Oto kod testu:
  1. //COUNT()
  2. $start = mktime()+microtime();
  3. $result = mysql_query("SELECT *, COUNT(*) from words");
  4. $result = mysql_fetch_assoc($result);
  5. $result = $result['COUNT(*)'];
  6. $end = mktime()+microtime();
  7. $time = $end-$start;
  8. echo "$result rekordów w <b>$time</b>s<hr/>";
  9.  
  10. //SQL_CALC_FOUND_ROWS
  11. $start = mktime()+microtime();
  12. $result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM words");
  13. $result = mysql_query("SELECT FOUND_ROWS()");
  14. $result = mysql_fetch_assoc($result);
  15. $result = $result['FOUND_ROWS()'];
  16. $end = mktime()+microtime();
  17. $time = $end-$start;
  18. echo "$result rekordów w <b>$time</b>s<hr/>";


skrypt zwraca przykładowo taki wynik:
25041 rekordów w 0.059356918334961s
25041 rekordów w 0.087986965179443s

Za każdym razem COUNT() jest szybsze, nie raz dwukrotnie. Words to prosta tabela składająca się tylko z dwóch pól id i word. Z góry dziękuję za pomoc
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:58