SELECT COUNT () vs mysql_num_rows ();
Mam duży stół (60+) milionów rekordów.
Używam skryptu PHP do poruszania się po tej tabeli.
Skrypt PHP (z paginacją) ładuje się bardzo szybko, ponieważ:
Silnik tabeli to InnoDBSELECT COUNT()
jest bardzo powolny imysql_num_rows()
nie jest opcją, więc zachowuję całkowitą liczbę wierszy (liczbę, której używam do generowania paginacji) w osobnej tabeli (aktualizuję ten rekordtotal_rows=total_rows-1
itotal_rows=total_rows1+1
podczasDELETE
iINSERT
).
Ale pytanie brzmi: co zrobić z paginacją wyników wyszukiwania?
Teraz robię to za pomocą 2 kroków:
1
$condition = " fname='rinchik' ";
$result = "SELECT * FROM my_large_table WHERE" . $condition;
Tutaj mam wszystkie wyniki wyszukiwania z DataBase.
2. Teraz muszę policzyć te wyniki, aby utworzyć podział na strony. Robię to:
$condition; <- we already have this from the step 1
$result_count = "SELECT COUNT(id) FROM my_large_table WHERE" . $condition;
I to jest trochę powolne.
Czy byłoby lepiej, jeśli zrobię to w ten sposób (za pomocą jednego kroku) ?:
$condition = " fname='rinchik' ";
$result = "SELECT * FROM my_large_table WHERE" . $condition;
$result_count = mysql_num_rows($result);