Kiedy weźmiesz COUNT(*)
zliczanie indeksów kolumn, to będzie to najlepszy wynik. MySQL z silnikiem MyISAM faktycznie przechowuje liczbę wierszy, nie liczy wszystkich wierszy za każdym razem, gdy próbujesz policzyć wszystkie wiersze. (na podstawie kolumny klucza podstawowego)
Używanie PHP do liczenia wierszy nie jest zbyt inteligentne, ponieważ musisz przesyłać dane z mysql do php. Po co to robić, skoro możesz osiągnąć to samo po stronie mysql?
Jeśli COUNT(*)
działa wolno, należy uruchomić EXPLAIN
zapytanie i sprawdzić, czy indeksy są rzeczywiście używane i gdzie należy je dodać.
Poniższe nie jest najszybszym sposobem, ale jest przypadek, w którym COUNT(*)
tak naprawdę nie pasuje - kiedy zaczynasz grupować wyniki, możesz napotkać problem, w którym COUNT
tak naprawdę nie liczy się wszystkich wierszy.
Rozwiązaniem jest SQL_CALC_FOUND_ROWS
. Jest to zwykle używane podczas wybierania wierszy, ale nadal musisz znać całkowitą liczbę wierszy (na przykład do stronicowania). Gdy wybierzesz wiersze danych, po prostu dołącz SQL_CALC_FOUND_ROWS
słowo kluczowe po SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Po wybraniu potrzebnych wierszy możesz uzyskać liczbę za pomocą tego pojedynczego zapytania:
SELECT FOUND_ROWS();
FOUND_ROWS()
należy wywołać natychmiast po zapytaniu wybierającym dane.
Podsumowując, wszystko sprowadza się do tego, ile masz wpisów i co znajduje się w instrukcji WHERE. Naprawdę powinieneś zwrócić uwagę na to, jak używane są indeksy, gdy jest dużo wierszy (dziesiątki tysięcy, miliony i więcej).
SELECT 1
i nieSELECT *
. Czy jest jakaś różnica?