Die Mitgliedschaft ist KOSTENLOS und bietet allen registrierten Nutzern unbegrenzten Zugriff auf alle Funktionen, Ressourcen und Tools von ConsultDomain.de! Optionale Mitgliedschaftsupgrades schalten exklusive Vorteile frei, wie Profil-Signaturen mit Links, Bannerplatzierungen, Erwähnungen im wöchentlichen Newsletter und vieles mehr – individuell angepasst an Ihr Mitgliedschaftslevel!

Willkommen!

Durch Ihre Registrierung bei uns können Sie mit anderen Mitgliedern unserer Community diskutieren, teilen und private Nachrichten austauschen.

Jetzt anmelden!

PHP/MySQL: effizient Anzahl von Datensaetzen ermitteln

MadMac

New member
Registriert
21. Juni 2004
Beiträge
2.036
Moin,

ich brauch mal Rat von 'nem PHP/MySQL Experten :)

Ich will die Anzahl aller Datensaetze in einer Remote-DB ermitteln, die einem bestimmten Suchkriterium entsprechen.

Das ginge zum Einen so:
Code:
$result=mysql_query("SELECT * FROM domains WHERE $searchstring ORDER BY $sortstring");
$num_doms=mysql_num_rows($result);
Dabei kommen alle Datensaetze mit rueber. Kostet Zeit und Bandbreite. Ich moechte aber zu diesem Zeitpunkt (noch) nicht alle Daten haben, sondern nur deren Anzahl zwecks Bestimmung der Seitenaufteilung und spaeterem selektiven Laden.

Also habe ich eine zweite Moeglichkeit ueber count(*):
Code:
$result=mysql_query("SELECT count(*) FROM domains WHERE $searchstring ORDER BY $sortstring");
$num_doms=mysql_result($result,0,"count(*)");
Frage: wird mit der zweiten Variante tatsaechlich nur die Anzahl uebertragen, oder laufen im Hintergrund trotzdem alle Daten auf. Mangels grosser Datenmengen kann ich einen Zeitgewinn im Moment noch nicht beurteilen und zu remote PHP/MySQL fehlen mir Erfahrungswerte.

(ORDER BY clause ist im 2. Fall sicher ueberfluessig, weil die eigentliche Abfrage mit Sortierung spaeter erfolgt)

Gruss,
Mac
 
Hi,

1. order by ist hier - wie Du schon geschrieben hast - sinnlos
2. ich arbeite gerade remote auf einer Tandem-DB und die Antwortzeiten sind dramatisch kürzer bei einem count(*), dürfte bei mysql ebenso sein.

Grüße,

Rainer
 
Da eigentlich jeder datensatz eine eindeutige id haben sollte, löse ich das immer so:

Code:
$result = mysql_query("SELECT id FROM tabelle") or die ("Fehler: ".mysql_error());
$anzahl = mysql_num_rows($result);

Ist für mich die einfachste und schnellste methode.
Übrigens sollte man, wenn man schon auf geschwindigkeit aus ist, keine platzhalter verwenden, sondern die spaltennamen direkt selectieren.
 
Zuletzt bearbeitet:
Verwende auf jeden Fall MySQL ab 4.0.x um die Volltextsuche nutzen zu können.

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])

http://www.mysql.com/doc/F/u/Fulltext_Search.html

Und selbstverständlich ist ein count(*) schneller...

Da Du sicherlich im traditionellen 3.23 er MySQL eine LIKE '%suchwort%' Abfrage machst, bringt auch kein Index auf das Feld 'domains' etwas. Das würde die Sache nur beschleunigen, wenn Du das erste %-Zeichen verbietest.

Ergo: MySQL 4.0x und count(*) Volltextsuche.

Gruß,

Ruediger
 

Who has viewed this thread (Total: 1) Details anzeigen

Neueste Themen

Beliebte Inhalte

Besonderer Dank

Zurzeit aktive Besucher

Statistik des Forums

Themen
68.348
Beiträge
377.383
Mitglieder
6.777
Neuestes Mitglied
tedcars
Zurück
Oben