phpbar.de logo

Mailinglisten-Archive

[php] mysql_num_rows trotz LIMIT

[php] mysql_num_rows trotz LIMIT

Andreas Demmer php at andreas-demmer.de
Die Jan 3 13:27:19 CET 2006


Michael schrieb:

> was macht nun mehr sinn:
> - einmal die neutrale query für COUNT(*) verwenden und dann
> nochmal für die eigentliche ausgabe
> 
> oder
> - die komplette query ohne limit nehmen, und bei der ausgabe
> in einer for schleife dann limitieren.

Ich mach es auf die 2. Weise: Erst alle counten, danach ein SELECT [...]
LIMIT [...]

Das ist auf alle Fälle bei großen Resultsets resourcenschonender. Ansonsten
mach doch mal beide Lösungen und messe die microtime(). Manchmal sind die
Ergebnisse verblüffend und nicht unbedingt das was man erwartet.

Beispiel bei der Rufnummerdatenbank eines Mobilfunk-Discounters:

100.000 Rufnummern ORDER BY RAND() LIMIT 0,[Anzahl Ergebnisse]
-> zeigt in der Rufnummernauswahl [Anzahl Ergebnisse] zufällige Nummern

Optimierungsansatz:
SELECT COUNT(number) [...]

Random Startwert für LIMIT mit PHP generieren, zwischen 0 und COUNT(number)
- ]Anzahl Ergebnisse]

SELECT [...] LIMIT [Random Startwert], [Anzahl Ergebnisse]

Resultat:
n  Rufnummern in Folge, allerdings mit zufälliger Startnummer -> trotzdem
viel langsamer als das erste Statement, auch wenn ich das NIE erwartet hätte
(zwar 2 Statements statt einem, aber er muss nicht ALLE Datensätze mischen
um nur ein paar auszuwählen).

Ergo:
Die beste Methode unterscheidet sich von Fall zu Fall, am besten beides
implementieren und die Performance messen.

Gruß,
Andreas

-- 
http://www.andreas-demmer.de
http://www.debugconsole.de

-- 
http://www.andreas-demmer.de


php::bar PHP Wiki   -   Listenarchive