sql >> Database >  >> RDS >> Mysql

PDO::rowCount VERSUS COUNT(*)

1e vraag:

Count COUNT() gebruiken , intern zal de server (MySQL) het verzoek anders verwerken.

Bij het doen van COUNT() , zal de server (MySQL) alleen geheugen toewijzen om het resultaat van de telling op te slaan.

Bij gebruik van $row=$SQL->rowCount(); de server (Apache/PHP) zal de volledige resultatenset verwerken, geheugen toewijzen voor al die resultaten en de server in de ophaalmodus zetten, wat veel verschillende details met zich meebrengt, zoals vergrendeling.

Houd er rekening mee dat PDOStatement::rowCount() retourneert het aantal rijen dat is beïnvloed door de laatste instructie, niet het aantal geretourneerde rijen. Als de laatste SQL-instructie die is uitgevoerd door de bijbehorende PDOStatement was een SELECT instructie, kunnen sommige databases het aantal rijen retourneren dat door die instructie wordt geretourneerd. Dit gedrag is echter niet gegarandeerd voor alle databases en er mag niet op worden vertrouwd voor draagbare toepassingen.

Volgens mijn analyse, als je COUNT() . gebruikt , zou het proces worden verdeeld in zowel MySQL als PHP, terwijl als u $row=$SQL->rowCount(); gebruikt , zou de verwerking meer voor PHP zijn.

Daarom COUNT() in MySQL is sneller.

2e vraag:

COUNT(*) is beter dan COUNT(id) .

Uitleg:

De count(*) functie in mysql is geoptimaliseerd om het aantal waarden te vinden. Het gebruik van jokertekens betekent dat niet elke rij wordt opgehaald. Het vindt alleen de telling. Gebruik dus count(*) waar mogelijk.

Bronnen:



  1. Waarom kan een tekstkolom geen standaardwaarde hebben in MySQL?

  2. mysql_upgrade mislukt - innodb-tabellen bestaan ​​niet?

  3. Gebruik @@IDENTITY om de laatst ingevoerde identiteitswaarde in SQL Server te retourneren

  4. Hoe voeg ik een aangepaste CHECK-beperking toe aan een MySQL-tabel?