W przypadku części serwisów konieczne jest podzielenie treści na strony. Można chcieć np. wyświetlać artykuły po 10 na stronie, może chodzić o podzielenie wyników wyszukiwania produktów w sklepie itp. Dobrze jest też mieć możliwość podać użytkownikowi, ile jest łącznie wyników – coś w rodzaju „wyświetlam 1-10 artykułów z 123”. Do tego typu sytuacji MySQL udostępnia funkcję FOUND_ROWS(), która w połączeniu z dyrektywą SQL_CALC_FOUND_ROWS umożliwia sprawdzenie ile rekordów zwraca dane zapytanie, jeśli nie będzie pod uwagę brana wartość LIMIT. Czyli wykonujemy zapytania:

SELECT SQL_CALC_FOUND_ROWS * FROM  artykul WHERE kategoria=10 LIMIT 10;
SELECT FOUND_ROWS();

Pierwsze z nich zwraca treść 10 pierwszych artykułów, a także zlicza ile artykułów znajduje się w kategorii 10. Wynik tych obliczeń zwraca drugie zapytanie, które już nie odwołuje się do danych w tabeli. Teoretycznie te dwa zapytania można zastąpić dwoma następującymi:

SELECT  * FROM artykul WHERE kategoria=10 LIMIT 10;
SELECT COUNT(*) FROM  artykul WHERE kategoria=10;

Które rozwiązanie jest szybsze? Sprawdźmy. Utworzymy trzy tabele, o identycznej strukturze.

czytaj dalej…