[PHP & MySQL] Verschil CPU load mysql_num_rows en COUNT

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemiddag,

Weet iemand over een verschil is in CPU load tussen mysql_num_rows(mysql_query("SELECT ID FROM Tabel")) en mysql_query("SELECT COUNT(ID) FROM Tabel")?

Bedankt,

Jeroen

Acties:
  • 0 Henk 'm!

Verwijderd

Ik raad je sterk aan de SELECT met COUNT te gebruiken ....

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Bij de eerste komt er een resultaatset van _alle_ records terug naar je php, bij 10 records boeit dat niet, bij 10.000.000 wel :)

Verder kijkt mysql vrij handig naar de indices die je op je tabel gelegd hebt en tabeldefinities/statistieken die er zijn en probeert aan de hand daarvan de count-uitkomst te bepalen, bij MyIsam-tabellen zal de count(*) stukken sneller zijn als er geen where is, dan de gewone select.

Acties:
  • 0 Henk 'm!

  • Unipuma
  • Registratie: Juli 2001
  • Laatst online: 06-04-2021
Niet alleen is een COUNT sneller omdat dat op de database zelf wordt afgehandeld (en die werken over het algemeen sneller dan script-talen), daarnaast wordt in het eerste geval ook -alle- data van de database naar de script-engine overgepompt (even uitgaande van client-side cursor op de database). Zeker als dit tussen twee verschillende servers is, kan dat een onnodige belasting van je netwerk zijn.

So much fun, it's a miracle it isn't declared illegal: driving a motorcycle


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Unipuma schreef op 24 december 2002 @ 20:52:
Niet alleen is een COUNT sneller omdat dat op de database zelf wordt afgehandeld (en die werken over het algemeen sneller dan script-talen), daarnaast wordt in het eerste geval ook -alle- data van de database naar de script-engine overgepompt (even uitgaande van client-side cursor op de database). Zeker als dit tussen twee verschillende servers is, kan dat een onnodige belasting van je netwerk zijn.

mysql_num_rows is een library functie van MySQL, wordt dus niet door de scripttaal zelf afgehandeld ;)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

ACM schreef op 24 December 2002 @ 23:40:
[nohtml]
[...]
[/nohtml]
mysql_num_rows is een library functie van MySQL, wordt dus niet door de scripttaal zelf afgehandeld ;)

Maar er wordt wel een hele resultset aangemaakt aangezien het voor mysql niet duidelijk is dat je alleen het aantal rijen opvraagt en hier niet doorheen gaat wandelen (fetchen).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan bijna altijd beter sql het werk laten doen, in plaats van het zelf doen in PHP (of enige andere taal waarmee je je database spul interpreteerd), omdat je sql server optimalisaties kan hebben, en omdat je als je php als laag boven je sql gebruikt, er tussen die lagen meer communicatie moet zijn, en communicatie is duur.

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
nog beter is COUNT(*) dit staat in de manual van MySQL en is volgens hun zeggen super-geoptimaliseerd (maw hij opent de database niet eens :)
Pagina: 1