Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT COUNT(*) czy count($array)
Forum PHP.pl > Forum > PHP
Luneth
Ciekawi mnie kwestia co jest szybsze i bardziej wydajne zwłaszcza przy kilku żądaniach równocześnie: SELECT COUNT(*) czy użycie funkcji count na tablicy z pobranymi wszystkimi rekordami. Zakładam, że takich rekordów w tabeli (załóżmy newsy) jest 20 tysięcy, zajmują 90 MB powierzchni dyskowej.
erix
Funkcja count zawsze będzie szybsza od pobrania wszystkich rekordów do klienta.

20k rekordów, to nie jest jeszcze dużo (zakładając, że masz dobre indeksy). Ale pobieranie wszystkiego i dopiero potem liczenie przez skrypt jest strzałem w stopę.
Luneth
Dobre indeksy? Czy możesz rozwinąć myśl? smile.gif
Swoją drogą poruszam tą kwestię, bo tak analizuję swoją klasę stronicowania i robię tak, że pobieram liczbę wszystkich rekordów na wstępie i obecne rozwiązanie to Select count(*) wraz z zapisaniem tej wartości jako zmienną sesyjną (dla odciążenia SQL) i zastanawiam się czy można byłoby zrobić to lepiej.
kilas88
Oczywiste jest, że lepiej wykonać zliczanie na poziomie bazy danych.

Jako ciekawostka:
http://mariusz.turek.salon404.pl/post/4,my...ws-kontra-count
Luneth
Dzięki za ciekawy artykuł, przeczytałem go i uświadamia parę ciekawych spraw smile.gif Szczerze to nigdy innej funkcji oprócz COUNT nie znałem do liczenia rekordów smile.gif
thek
Kilas.... Chciałbym zdementować jakoby SQL_CALC nie używał indeksów. Dziwnym trafem robiłem explain na konfiguracji: php 5.2.8, mysql 5.1.36 i Apache 2.2.11 i explain pokazywał użycie indeksów dla niego. Nie wiem więc czemu w cytowanym artykule autorowi "nie wyszło". Zamiast więc cytować jedynie - sam sprawdź w kliencie zapytanie używając explain i się przekonaj.
zelu
Poza tym w większości porównań SQL_CALC vs COUNT, które widziałem w necie do testów używane są proste zapytania typu SELECT cos FROM tabela WHERE cos = cos_innego. A co w przypadku dość sporych zapytań z np dwoma JOINami i dość potężnym zestawem warunków, group by i orderem? Bo wtedy COUNT na pewno nie wychodzi korzystniej smile.gif


Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.