Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:najszybszy sposób liczenia wierszy

Kiedy COUNT(*) pobiera indeksy kolumn count, więc będzie to najlepszy wynik. Mysql z MyISAM silnik faktycznie przechowuje liczbę wierszy, nie zlicza 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 mądre, ponieważ musisz wysyłać dane z mysql do php. Po co to robić, skoro możesz osiągnąć to samo po stronie mysql?

Jeśli COUNT(*) jest wolny, powinieneś uruchomić EXPLAIN w zapytaniu i sprawdź, czy indeksy są naprawdę używane i gdzie należy je dodać.

To nie jest najszybsze sposób, ale jest przypadek, w którym COUNT(*) tak naprawdę nie pasuje - kiedy zaczniesz grupować wyniki, możesz napotkać problem, gdzie COUNT tak naprawdę nie liczy wszystkich wierszy.

Rozwiązaniem jest SQL_CALC_FOUND_ROWS . Jest to zwykle używane, gdy wybierasz wiersze, ale nadal musisz znać całkowitą liczbę wierszy (na przykład do stronicowania).Wybierając wiersze danych, po prostu dołącz SQL_CALC_FOUND_ROWS słowo kluczowe po WYBIERZ:

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() musi zostać wywołany natychmiast po zapytaniu wybierającym dane.

Podsumowując, wszystko tak naprawdę sprowadza się do tego, ile masz wpisów i co jest w oświadczeniu WHERE. Powinieneś naprawdę zwrócić uwagę na to, jak używane są indeksy, gdy jest wiele wierszy (dziesiątki tysięcy, miliony i więcej).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak monitorować metryki HAProxy za pomocą ClusterControl

  2. Zrozumienie transakcji pdo mysql

  3. Jak uzyskać rekordy między 2 datami w MySQL?

  4. Jak zainstalować MySQL 8.0 na RHEL/CentOS 8/7 i Fedorze 35?

  5. PDO::fetchAll kontra PDO::fetch w pętli