Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SELECT COUNT(*) czy count($array), co wydajniejsze?
Luneth
post 28.07.2010, 16:26:02
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Luneth 28.07.2010, 16:47:50


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
erix
post 28.07.2010, 16:28:57
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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ę.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Luneth
post 28.07.2010, 16:33:24
Post #3





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

Ostrzeżenie: (0%)
-----


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.


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
kilas88
post 28.07.2010, 16:37:43
Post #4





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

Ostrzeżenie: (0%)
-----


Oczywiste jest, że lepiej wykonać zliczanie na poziomie bazy danych.

Jako ciekawostka:
http://mariusz.turek.salon404.pl/post/4,my...ws-kontra-count
Go to the top of the page
+Quote Post
Luneth
post 28.07.2010, 16:47:20
Post #5





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

Ostrzeżenie: (0%)
-----


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


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
thek
post 29.07.2010, 09:23:29
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
zelu
post 29.07.2010, 09:28:39
Post #7





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 16:04