Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO::rowCount VS COUNT(*)

1-ви въпрос:

Използване на count COUNT() , вътрешно сървърът (MySQL) ще обработи заявката по различен начин.

Когато правите COUNT() , сървърът (MySQL) ще разпредели памет само за съхраняване на резултата от преброяването.

Когато използвате $row=$SQL->rowCount(); сървърът (Apache/PHP) ще обработи целия набор от резултати, ще разпредели памет за всички тези резултати и ще постави сървъра в режим на извличане, което включва много различни детайли, като например заключване.

Обърнете внимание, че PDOStatement::rowCount() връща броя на редовете, засегнати от последния израз, а не броя на върнатите редове. Ако последният SQL израз, изпълнен от свързания PDOStatement беше SELECT оператор, някои бази данни могат да върнат броя на редовете, върнати от този израз. Това поведение обаче не е гарантирано за всички бази данни и не трябва да се разчита на него за преносими приложения.

В моя анализ, ако използвате COUNT() , процесът ще бъде разделен както на MySQL, така и на PHP, докато ако използвате $row=$SQL->rowCount(); , обработката ще бъде повече за PHP.

Следователно COUNT() в MySQL е по-бърз.

2-ри въпрос:

COUNT(*) е по-добре от COUNT(id) .

Обяснение:

count(*) функцията в mysql е оптимизирана за намиране на броя на стойностите. Използването на заместващ знак означава, че не извлича всеки ред. Открива само броя. Затова използвайте count(*) където е възможно.

Източници:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Експортирайте и импортирайте всички MySQL бази данни наведнъж

  2. Как да направите sql-mode=NO_ENGINE_SUBSTITUTION постоянен в MySQL my.cnf

  3. PHP/PDO/MySQL:вмъкването в MEDIUMBLOB съхранява лоши данни

  4. MySQL Пълнотекстово търсене и SOUNDEX

  5. Получавате броя на засегнатите редове в изявление за актуализиране на MySQL?