j0Shi: Gechwindigkeitsproblem mit Subquery bei mySQL

Beitrag lesen

Sers,

ich habe folgendes Problem:
in einem kleinen Shopsystem soll neben den Artikeldaten auch gleich die komplette Anzahl der vorhandenen Artikel in der übergeordneten Kategorie angezeigt werden. Also z.B:

Intel Core2Duo E8400 (Kategorie: CPUs, insgesamt 250 Artikel in dieser Kategorie)
Gigabyte Mainboard .... usw.

Da ich die Artikeldaten bisher in einer While-Schleife ausgewertet habe, habe ich in dieser Schleife zum Herausfinden der Artikelanzahl nochmal eine Abfrage geschrieben. Also count(*) WHERE cat = 237.

Da teilweise allerdings 500 Artikel auf einmal angezeigt werden hieß das bis vor kurzem noch, dass bis zu zusätzliche 500 SQL-Anfragen pro Pageview den Server belasteten. Um diesem Problem zu entgehen wollte ich alles in einer Abfrage abarbeiten. Die einzige Abfrage, die mir das dazu passende Ergebnis liefert ist:

  
SELECT *, cat AS subqcat, (  
  
SELECT COUNT( subqcat )  
FROM artikelliste  
WHERE cat = subqcat  
GROUP BY subqcat  
)  
FROM artikelliste  

Die Originalquery umfasst natürlich noch einiges mehr, so werden die Artikel z.B. auch mit anderen Tabellen verknüpft, in denen Kommentare und Preisentwicklung gespeichert wird.

Mit dieser Systematik braucht diese einfachste Anfrage für 10 Artikel 0.0719 sec, 50 0.2606 sec und 500 2,4 sec. Finde ich erstmal unzumutbar ;)
Da die eigentliche Query nochmals komplizierter ist dauert hier der Aufruf von 500 Artikeln über 20 Sekunden.
Zwar habe ich als Testsystem hier zu Hause nur einen Duron 1400 mit 512 MB aber selbst dafür ist es noch etwas lahm.

Die Frage ist, ob es evtl. noch andere Möglichkeiten gibt, dieses Problem zu lösen, oder ob ich mich doch mit den zusätzlichen Datenbankabfragen in der Schleife abfinden muss. Eine Indizierung von cat brachte keine Verbesserung.

lg
j0Shi