SQL_CALC_FOUND_ROWS
jest przydatne tylko wtedy, gdy używasz LIMIT
ale nadal chcesz wiedzieć, ile wierszy zostałoby znalezione bez LIMIT
.
Pomyśl, jak to działa:
SELECT SQL_CALC_FOUND_ROWS * FROM Users;
Zmuszasz bazę danych do pobrania/przeanalizowania WSZYSTKICH danych w tabeli, a następnie je wyrzucasz. Nawet jeśli nie zamierzasz pobierać żadnego z wierszy, serwer DB nadal zacznie pobierać rzeczywiste dane z dysku, zakładając, że będziesz ich potrzebować.
W kategoriach ludzkich kupiłeś całą zawartość supersklepu spożywczego, ale wyrzuciłeś wszystko oprócz paczki gumy ze stoiska przy kasie.
Natomiast wykonując:
SELECT count(*) FROM users;
informuje silnik bazy danych, że chociaż chcesz wiedzieć, ile jest wierszy, nie możesz mniej dbać o rzeczywiste dane. W większości inteligentnych systemów DBMS silnik może pobrać tę liczbę z metadanych tabeli lub po prostu przeszukać indeks klucza podstawowego tabeli, nigdy nie dotykając danych wiersza na dysku.