für mein privates Langzeitprojekt bin ich gerade dabei die Performance zu verbessern. Ich switche von mysql_num_rows() zu "select count(...)". Gerade bei den Statistiken mit sehr vielen Einträgen hat sich die Performance spürbar verbessert (Script-Laufzeit von 5s auf 2sek). Jetzt suche ich weitere num_rows und möchte die auch ändern. Klappt überwiegend, weil ich nicht sooo umfangreiche Abfragen habe ... bis auf eine:
Für die Pagination benötige ich die Gesamtanzahl der Einträge ... da es sich hier um Mengen bis in die 20.000 handelt, ist count() wieder der Favorit. Nach viel probieren hab ich die Lösung gefunden ... aber die Performance ist gefühlt langsamer als mit num_rows!
Ausgangslage (ALT)
Code: Alles auswählen
SELECT COUNT( ofr.persidofdb ) AS anz, ofr.persidofdb, ofr.name, ofp.geschlecht, ofp.persidofdb FROM ofdb_rollen AS ofr, ofdb_personen AS ofp WHERE ofr.funktion LIKE 'Darsteller' and ofr.persidofdb = ofp.persidofdb AND ofp.geschlecht LIKE 'm' GROUP BY ofp.persidofdb
13.500 Zeilen
Code: Alles auswählen
[ANZ | Persidofdb | Name | Geschlecht]
[22 | 123 | Herr Abc | m]
[20 | 234 | Herr Bcd | m]
[...]
Jetzt muß ich diese Abfrage erweitern um ein count() setzen zu können. Mein Ansatz bisher:
Code: Alles auswählen
SELECT count(anz) from (
SELECT
COUNT(ofr.persidofdb) AS anz,
ofr.persidofdb AS egal,
ofr.name,
ofp.geschlecht,
ofp.persidofdb
FROM
ofdb_rollen AS ofr,
ofdb_personen AS ofp
WHERE
ofr.funktion LIKE 'Darsteller'
and ofr.persidofdb = ofp.persidofdb
AND ofp.geschlecht LIKE 'm'
GROUP BY
ofp.persidofdb
) AS auchegal
Der Seitenwechsel ist jetzt gefühlt langsamer (die Abfrage in phpMyAdmin dauert 1,2sek) - trotz count. Vermutlich das verschachteln von SELECT?
Was kann ich jetzt noch optimieren?
Gruß
Wuppi