![]() |
![]() ![]() |
![]() |
![]() ![]()
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." |
|
|
![]()
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! |
|
|
![]()
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?
![]() 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." |
|
|
![]()
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 |
|
|
![]()
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
![]() ![]() -------------------- "It's always darkest before the dawn." |
|
|
![]()
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
|
|
|
![]()
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
![]() Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 16:04 |