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);

questionAnswers(3)

yourAnswerToTheQuestion