Første spørgsmål:
Bruger tæller COUNT()
, internt vil serveren (MySQL) behandle anmodningen anderledes.
Når du laver COUNT()
, vil serveren (MySQL) kun allokere hukommelse til at gemme resultatet af optællingen.
Når du bruger $row=$SQL->rowCount();
serveren (Apache/PHP) vil behandle hele resultatsættet, allokere hukommelse til alle disse resultater og sætte serveren i hentetilstand, som involverer en masse forskellige detaljer, såsom låsning.
Bemærk, at PDOStatement::rowCount()
returnerer antallet af rækker, der er påvirket af den sidste sætning, ikke antallet af returnerede rækker. Hvis den sidste SQL-sætning udført af den tilknyttede PDOStatement
var en SELECT
sætning, kan nogle databaser returnere antallet af rækker, der returneres af denne sætning. Denne adfærd er dog ikke garanteret for alle databaser og bør ikke stoles på for bærbare applikationer.
På min analyse, hvis du bruger COUNT()
, ville processen blive opdelt til både MySQL og PHP, mens hvis du bruger $row=$SQL->rowCount();
, ville behandlingen være mere til PHP.
Derfor COUNT()
i MySQL er hurtigere.
2. spørgsmål:
COUNT(*)
er bedre end COUNT(id)
.
Forklaring:
count(*)
funktion i mysql er optimeret til at finde antallet af værdier. Brug af jokertegn betyder, at den ikke henter hver række. Det finder kun tællen. Så brug count(*)
hvor det er muligt.
Kilder: