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: