# SQL-Abfrage verbessern



## Angel4585 (24. Aug 2008)

Hallo,

ich programmiere zur Zeit ein Browsergame, genauer einen Fussballmanager.
Jetzt möchte ich das tägliche Training berechnen und habe dafür folgende Abfrage vorgesehen:


```
update players as p1 left outer join player_contracts as c1 on c1.player=p1.id and c1.ende=0 left outer join team_training as t1 on t1.team=c1.team SET
   p1.skill1=p1.skill1*t1.t1skill1,
   p1.skill2=p1.skill2*t1.t1skill2,
   p1.skill3=p1.skill3*t1.t1skill3,
   p1.skill4=p1.skill4*t1.t1skill4,
   p1.skill5=p1.skill5*t1.t1skill5,
   p1.skill6=p1.skill6*t1.t1skill6
```

Das Problem ist jetz: Die Abfrage hat nach 5 Minuten gerademal 7.000 Datensätze durch, von insgesamt ~40.000
Also irgendwo muss ich denk ich was übersehen, das kann nicht so lange dauern.

die Tabelle players hat ~40.000 DS, 
die Tabelle player_contracts aktuell genausoviele, später aber immer mehr als die Players tabelle,
die Tabelle team_trainings hat ~4.000

Also was ist an der Abfrage verkehrt?

Ich verwende übrigens PHP&MySQL


----------



## DP (24. Aug 2008)

indizes korrekt gesetzt?


----------



## Angel4585 (24. Aug 2008)

wo wären die denn hier angebracht?

Beim Absenden des Beitrags hier kam grad folgender Fehler:

Ran into problems sending Mail. Response: 535 Authentication failed for admin@java-forum.org - authsql/login - wrong password

DEBUG MODE

Line : 40
File : /www0126/www.java-forum.org/de/includes/smtp.php


----------



## SlaterB (24. Aug 2008)

bei den Ids für den Join?,
kannst ja testen, indem du nur ein Select abfragst statt ein Update durchzuführen,
dauert das Select von p1.skill5 und zugehörigen t1.t1skill5 auch mehrere Minuten oder wenige Sekunden?


----------



## Angel4585 (24. Aug 2008)

aslo auf id, player und teams sind jeweils primary bzw foreign keys. reichts das nicht?

Ich werd das mal mit nem select testen

Edit: schonwieder der Fehler beim Absenden, sollte sich ma wer anschaun  ???:L


----------



## Angel4585 (24. Aug 2008)

Kennt MySQL überhaupt Foreign Keys? Mein phpMyAdmin zeigt mir keine an, sagt mir aber gleichzeitig dass er dieses Statement ausführen konnte:


```
ALTER TABLE player_contracts ADD CONSTRAINT fk_player_contract_player_t FOREIGN KEY ( player ) REFERENCES players( id )
```


----------



## Guest (3. Sep 2008)

Angel4585 hat gesagt.:
			
		

> Kennt MySQL überhaupt Foreign Keys? Mein phpMyAdmin zeigt mir keine an, sagt mir aber gleichzeitig dass er dieses Statement ausführen konnte:


Ja, MySQL kennt Foreign Keys.


----------



## maki (3. Sep 2008)

Anonymous hat gesagt.:
			
		

> Angel4585 hat gesagt.:
> 
> 
> 
> ...


Aber nur falls (My)InnoDB als Tabellentype gewählt wurde, der standard Typ (My)ISAM kennt so etwas nicht und ist daher auch nicht wirklich relational.


----------



## Gast2 (3. Sep 2008)

Moin,

ich tippe hier darauf das JOIN's nicht ganz sauber sind ... im Studium hatte ich mal mehrere Tabelle mit JOIN's verbunden ... der Rechner/Server rödelte und meldete sich erst nach ein Minuten wieder ... rund 100.000 Zeilen bearbeitet ... nur gut das die Tabellen zusammen eine mehrere Hand voll Datensätze hatte ... nachdem ich nochmal etwas über die JOIN's nachgedacht habe ging es flotter

hand, mogel


----------

