phpbar.de logo

Mailinglisten-Archive

[php] performanceproblem mit "subselects"

[php] performanceproblem mit "subselects"

Oliver Kurlvink php_(at)_phpcenter.de
12 Nov 2001 10:30:09 CET


>  wo steht welche personen sich welche artikel wie oft angeschaut haben ?
>  gib mal ne genaue Aufstellung der relevanten Tabellen ....

naja, das ganze hatte ich vor =FCber 1,5 jahren mal angefangen zu
programmieren, dann aber aufgeh=F6rt f=FCr die site nochwas zu machen. da
die beiden jetzigen programmierer wegen krankheit ausfallen (bei einem
sogar bis zum fr=FChjahr) muss ich also wieder ran und meinen mist
aufr=E4umen :)

insgesamt gibt es eine tabelle namens personalize. dadrin sind folgende
spalten enthalten:

personalizeid, table, articleid, id

die ganze site hat verschiedene table, z.b. cdreviews, dadrin hat jeder
artikel (logisch) eine eindeutige id. wird nun z.b. cd-reviews 522
aufgerufen, so landet in der personalize-tabelle der eintrage

(id), cdreviews, 522, (id) (werte in klammern sind erst einmal egal).
table hatte ich damals als string angelegt, heute w=FCrde ich es
vermutlich als enum deklarieren...

ich habe also alle daten in einer gro=DFen tabelle. anhand der daten kann
ich herausfinden welche benutzer welchen artikel aufgerufen haben. und
ich kann herausfinden welche artikel von welchem benutzer aufgerufen
wurden. anhand dieser relationen l=E4sst sich, theoretisch, so eine
related-article-liste erzeugen, wie amazon.de dies bei b=FCchern macht.

im ersten schritt muss ich nun herausfinden, welche anderen benutzer
den aktuell ausgew=E4hlten artikel aufgerufen haben. das w=E4re select 1.

nachdem ich diese benutzer habe muss ich nun nur noch die =FCbersicht
=FCber die artikel kriegen, die diese benutzer sich ebenfalls angeschaut
haben und davon eine top10 oder top20 erstellen, wobei geschaut wird,
welche artikel bei diesen benutzern am h=E4ufigsten auftauchen.

momentan (wie gesagt ist der code schon etwas =E4lter) sind dies zwei
selects:

1. andere benutzer herausfinden
2. artikel herausfinden, die diese benutzer angeschaut haben
3. h=E4ufigkeitsanalyse per php und ausgabe der top10 (dies kann sicher
ebenfalls die datenbank selber machen, obwohl ich damals zu keinem
wirklich brauchbarem ergebnis gekommen bin)

am liebsten h=E4tte ich dies in einem select. es wird mit 750000 bis 1
million datens=E4tzen gearbeitet, weshalb die wege m=F6glichst kurz sein
sollten. sp=E4ter wird die top10-ausgabe separat gespeichert und nur alle
paar tage aktualisiert, um die geschwindigkeit zu dr=FCcken, allerdings
darf dieses skript nat=FCrlich ebenfalls nicht 3 sekunden pro artikel
ben=F6tigen, wie es momentan der fall ist...




php::bar PHP Wiki   -   Listenarchive