sql >> Databasteknik >  >> RDS >> Mysql

PDO::rowCount VS COUNT(*)

Första frågan:

Använder count COUNT() , internt kommer servern (MySQL) att behandla begäran på ett annat sätt.

När du gör COUNT() , kommer servern (MySQL) endast att allokera minne för att lagra resultatet av räkningen.

När du använder $row=$SQL->rowCount(); servern (Apache/PHP) kommer att bearbeta hela resultatuppsättningen, allokera minne för alla dessa resultat och sätta servern i hämtningsläge, vilket involverar många olika detaljer, såsom låsning.

Notera att PDOStatement::rowCount() returnerar antalet rader som påverkas av den sista satsen, inte antalet returnerade rader. Om den sista SQL-satsen exekveras av den associerade PDOStatement var en SELECT kan vissa databaser returnera antalet rader som returneras av den satsen. Detta beteende är dock inte garanterat för alla databaser och bör inte förlitas på för bärbara applikationer.

På min analys, om du använder COUNT() , skulle processen delas upp till både MySQL och PHP medan om du använder $row=$SQL->rowCount(); , skulle bearbetningen vara mer för PHP.

Därför COUNT() i MySQL är snabbare.

Andra frågan:

COUNT(*) är bättre än COUNT(id) .

Förklaring:

count(*) funktion i mysql är optimerad för att hitta antalet värden. Att använda jokertecken betyder att den inte hämtar varje rad. Det bara hitta räkningen. Så använd count(*) där det är möjligt.

Källor:



  1. Kardinalitetsuppskattning för ett predikat på ett COUNT-uttryck

  2. Store_result och get_result för uttalande

  3. Hur kan jag veta om ett SQL-undantag kastades på grund av brott mot främmande nyckel?

  4. Kan jag villkorligt upprätthålla en unikhetsbegränsning?