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

PDO::rowCount VS COUNT(*)

Pierwsze pytanie:

Korzystanie z licznika COUNT() , wewnętrznie serwer (MySQL) przetworzy żądanie inaczej.

Podczas wykonywania COUNT() , serwer (MySQL) przydzieli pamięć tylko do przechowywania wyniku liczenia.

Używając $row=$SQL->rowCount(); serwer (Apache/PHP) przetworzy cały zestaw wyników, przydzieli pamięć dla wszystkich tych wyników i przełączy serwer w tryb pobierania, który obejmuje wiele różnych szczegółów, takich jak blokowanie.

Zwróć uwagę, że PDOStatement::rowCount() zwraca liczbę wierszy, których dotyczy ostatnia instrukcja, a nie liczbę zwróconych wierszy. Jeśli ostatnia instrukcja SQL wykonana przez powiązany PDOStatement był SELECT instrukcji, niektóre bazy danych mogą zwracać liczbę wierszy zwróconych przez tę instrukcję. Jednak to zachowanie nie jest gwarantowane dla wszystkich baz danych i nie należy na nim polegać w przypadku aplikacji przenośnych.

W mojej analizie, jeśli używasz COUNT() , proces zostanie podzielony na MySQL i PHP, natomiast jeśli użyjesz $row=$SQL->rowCount(); , przetwarzanie byłoby bardziej w przypadku PHP.

Dlatego COUNT() w MySQL jest szybszy.

Drugie pytanie:

COUNT(*) jest lepszy niż COUNT(id) .

Wyjaśnienie:

count(*) funkcja w mysql jest zoptymalizowana do znajdowania liczby wartości. Użycie symbolu wieloznacznego oznacza, że ​​nie pobiera on każdego wiersza. Znajduje tylko hrabiego. Użyj więc count(*) wszędzie tam, gdzie to możliwe.

Źródła:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najszybszy sposób na zrzucenie i załadowanie bazy danych MySQL InnoDB przy użyciu mysqldump?

  2. Porównaj wartości znaczników czasu i przypisz wartość do każdego z nich na wypadek, gdyby się zmieniły

  3. Jak wygenerować serię średnich godzinowych w MySQL?

  4. varchar automatycznego przyrostu w MySQL

  5. PHP 7 RC3:Jak zainstalować brakujące PDO MySQL