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(*)
където е възможно.
Източници: