Czy jest to szybsze, gdy zamiast * używam nazwy indeksowanej kolumny? W ten sposób: WYBIERZ LICZNIK (identyfikator) Ztablename
1
Tylko nieznacznie. Otrzymałem tabelę wierszy 21961904, do której jego COUNT zapytał w 115 sekund, podczas gdy użycie ID zajęło 107 sekund.
Bondolin
2
COUNT (*) to ścisła definicja języka. Otrzymasz błąd analizy, jeśli spróbujesz COUNT (*) zwróć uwagę na spację
ppostma1
9
Dasz radę COUNT(1), to będzie najszybszy sposób.
Shota Papiashvili
Jaki jest najlepszy sposób użycia COUNT () do napisania zmiennej w PHP? Czy robię „... COUNT (*) AS rowCount ...” w SQL, czy używa on $ results-> num_rows, czy też istnieje sposób bezpośredniego wywołania tego wyniku?
Nosajimiki
71
Ponieważ nikt o tym nie wspomniał:
show table status;
zawiera listę wszystkich tabel wraz z dodatkowymi informacjami, w tym szacunkowymi wierszami dla każdej tabeli. To jest to, czego phpMyAdmin używa na swojej stronie bazy danych.
Te informacje są dostępne w MySQL 4, prawdopodobnie również w MySQL 3.23 - dawno temu w bazie danych schematu informacji.
AKTUALIZACJA:
Ponieważ głosowanie odrzucono, chcę wyjaśnić, że pokazana liczba jest szacunkowa dla InnoDB i TokuDB i jest absolutnie poprawna dla silników pamięci masowej MyISAM i Aria (Maria).
Liczba rzędów. Niektóre mechanizmy przechowywania danych, takie jak MyISAM, przechowują dokładną liczbę. W przypadku innych silników pamięci masowej, takich jak InnoDB, ta wartość jest przybliżeniem i może różnić się od rzeczywistej wartości nawet o 40% do 50%. W takich przypadkach użyj polecenia SELECT COUNT (*), aby uzyskać dokładną liczbę.
Jest to również najszybszy sposób na sprawdzenie liczby wierszy w MySQL, ponieważ zapytanie takie jak:
select count(*)fromtable;
Wykonywanie pełnego skanowania tabeli może być bardzo kosztowną operacją, która może zająć wiele godzin na dużym serwerze o dużym obciążeniu. Zwiększa również I / O dysku.
Ta sama operacja może zablokować tabelę dla wstawień i aktualizacji - dzieje się tak tylko w egzotycznych silnikach pamięci masowej.
InnoDB i TokuDB działają poprawnie z blokadą tabeli, ale wymagają pełnego skanowania tabeli.
Wygląda na to, że jest to najbardziej efektywny sposób liczenia wierszy. Zastanawiam się, dlaczego to nie jest odpowiedź? Używam InnoDB. Z blokadą tabeli liczba wierszy powinna być dokładna, prawda?
Chung Lun Yuen
dla innodb szacuje się . ale możesz go użyć w niektórych przypadkach „Nasza witryna ma xxx członków”, „Wykryliśmy xxx wyników podobnych do Twojego” i tak dalej.
Nick
Nie jestem pewien. ale dla Innodb to nie jest prawdziwa liczba. Ale jest całkiem przydatne w przypadku tabel z milionem wierszy.
Nick
4
Przeglądanie tabel w celu policzenia każdego wiersza w celu uzyskania liczby wierszy jest raczej śmieszne. Dlatego też wolę tę odpowiedź.
th3penguinwhisperer
35
Mamy inny sposób sprawdzenia liczby wierszy w tabeli bez uruchamiania selectzapytania w tej tabeli.
Każda instancja MySQL ma bazę danych information_schema. Jeśli uruchomisz następujące zapytanie, poda ono pełne szczegóły dotyczące tabeli, w tym przybliżoną liczbę wierszy w tej tabeli.
select*from information_schema.TABLES where table_name ='table_name'\G
Jeśli masz kilka pól w swojej tabeli, a Twoja tabela jest ogromna, lepiej NIE UŻYWAĆ,* ponieważ załaduj wszystkie pola do pamięci, a użycie poniższych da lepszą wydajność
Może to zwrócić szacunkową liczbę wierszy. W jednym przykładzie otrzymałem 55 940 343 wierszy przy użyciu COUNT (*), ale 56 163 339 przy użyciu tej metody, więc było ono wyłączone o ponad 200 tys.
jcoffland
@jcoffland, wspomniałem o odpowiedzi _ Santosha_ powyżej, która stwierdza, że wynik jest przybliżony . Moja odpowiedź to bardziej szczegółowe, praktyczne pytanie. Jest całkiem jasne, jeśli chodzi o odpowiedzi, jeśli chcesz precyzyjnie zliczać count(*)ze świadomością wydajności
Mohammad Kanan,
1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;$total =0;$sqls = mysql_query($sql,$conn);if($sqls ){$total = mysql_result($sqls,0);};
echo "Total:".$total;`
tablename
COUNT(1)
, to będzie najszybszy sposób.Ponieważ nikt o tym nie wspomniał:
zawiera listę wszystkich tabel wraz z dodatkowymi informacjami, w tym szacunkowymi wierszami dla każdej tabeli. To jest to, czego phpMyAdmin używa na swojej stronie bazy danych.
Te informacje są dostępne w MySQL 4, prawdopodobnie również w MySQL 3.23 - dawno temu w bazie danych schematu informacji.
AKTUALIZACJA:
Ponieważ głosowanie odrzucono, chcę wyjaśnić, że pokazana liczba jest szacunkowa dla InnoDB i TokuDB i jest absolutnie poprawna dla silników pamięci masowej MyISAM i Aria (Maria).
Zgodnie z dokumentacją :
Jest to również najszybszy sposób na sprawdzenie liczby wierszy w MySQL, ponieważ zapytanie takie jak:
Wykonywanie pełnego skanowania tabeli może być bardzo kosztowną operacją, która może zająć wiele godzin na dużym serwerze o dużym obciążeniu. Zwiększa również I / O dysku.
Ta sama operacja może zablokować tabelę dla wstawień i aktualizacji - dzieje się tak tylko w egzotycznych silnikach pamięci masowej.
InnoDB i TokuDB działają poprawnie z blokadą tabeli, ale wymagają pełnego skanowania tabeli.
źródło
Mamy inny sposób sprawdzenia liczby wierszy w tabeli bez uruchamiania
select
zapytania w tej tabeli.Każda instancja MySQL ma bazę danych information_schema. Jeśli uruchomisz następujące zapytanie, poda ono pełne szczegóły dotyczące tabeli, w tym przybliżoną liczbę wierszy w tej tabeli.
źródło
Po prostu:
źródło
źródło
Po prostu zrób
Możesz określić warunki za pomocą Where po tym
źródło
Jeśli masz kilka pól w swojej tabeli, a Twoja tabela jest ogromna, lepiej NIE UŻYWAĆ,
*
ponieważ załaduj wszystkie pola do pamięci, a użycie poniższych da lepszą wydajnośćźródło
Jak wspomniał Santosh , myślę, że to zapytanie jest odpowiednio szybkie, bez przeszukiwania całej tabeli.
Aby zwrócić wynik całkowity liczby rekordów danych dla określonej nazwy tabeli w określonej bazie danych :
źródło
count(*)
ze świadomością wydajnościźródło
Musisz użyć funkcji count (), która zwraca liczbę wierszy spełniających określone kryteria
źródło
Jeśli masz klucz podstawowy lub unikalny klucz / indeks, szybsza możliwa metoda (przetestowana z 4 milionami tabel wierszy)
a następnie uzyskaj pole liczności (jest bliskie natychmiastowej)
Czasy, w których od 0,4 s do 0,0001 ms
źródło