phpbar.de logo

Mailinglisten-Archive

Auf Referenz pruefen

Auf Referenz pruefen

Nikolas Hagelstein hagelstein at hauptsache.net
Mit Aug 13 12:14:36 CEST 2003


Hi,

folgendes wurden hier schon mal vor einiger Zeit besprochen,
aber ich fass es trotzdem nochmal kurz zusammen, vielleicht
gibt ja inzwischend bessere ideen.

Situation (vorsicht monospace einschalten ;) ):

artikeltbl		  AtoB                bildtbl

-------------	-------------      -------------
|  artnr	|--->	|  artref   |  .-> |    bid    |
-------------	-------------  |   -------------
|bezeichnung|     |  bildref  | -´   |    file   |
-------------	-------------      -------------
|  Preis	|                        |    type   |
-------------                        -------------

Wie hier vereinfacht dargestellt, gibt es
Artikel, zu dennen es jeweils 1/n Bilder geben kann,
wobei ein Bild nicht zwingen zu einem Artikel
gehoert.(Also ne stinknormale n/m - Relation)

Gewuenscht ist jetzt ueber die middleware(in diesem fall PHP)
eine Artikelliste anzuzeigen, in der  gekennzeichnet ist,
ob es zu diesem Artikel mindestens
ein Bild gibt. Etwa so:

---------------------------------------------------
bezeichnung          Preis              hasbild   |
---------------------------------------------------
apfel                0,70 Eur                     |
gurke                0,50 Eur              x      |
---------------------------------------------------


Die Liste soll sich nach allen Felder sortieren lassen.

Das Query, was das ermittelt sieht also etwa so aus:

SELECT  a.*,if(ab.bildref is NULL,0,1) AS hasbild from Artikel
LEFT JOIN AtoB ab ON a.artnr=ab.artref
GROUP BY a.artnr
ORDER BY blabla
LIMIT $start,$perpage


Problem ist, das durch das Group by das query extrem lahm wird
(ca. 5-8 sec. bei 16000 artikel und 4000 bildern).

Ziel ist das ganze zu beschleunigen.

Es gab da auch schon ideen eurerseits:

z.B.
Das Flag hasbild ueber die middelware mit nem 2ten query
zu erzeugen -> faellt aus, da dann keine sortierung mehr moeglich ist.

Die einzige Loesung die mir dazu einfaellt ist, die artikeltabelle um ein
feld zu erweitern (hasbild) und dieses beim Winpflegen des artikels zu
setzen.
Das verstoesst zwar ein wenig gegen die normalform ist aber zu Gunsten der
Performance in jedenfall vertrettbar.

Bevor ich das jetzt so implementiere wollte ich nochmal kurz nachfragen,
ob jemand vielleicht noch ne bessere Idee hat.

Entschuldigt die ausfuehrliche Darstellung, aber ich wollt sicher gehen,
dass es keine missverstaendnisse gibt.

Gruss,
          Niko















-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive