ich es wirklich schätzen würde, wenn einige von Ihnen helfen können, meine Tabellen zu optimieren, da sie zur Zeit extrem lange dauern, weil der folgenden Probleme auszuführen:MySQL - Bitte helfen Sie mit Optimierung, bin ich nicht sicher, wie
Haupttisch :
game {
game_id [PRIMARY KEY]
*team_id
*stadium_id
home_score
opponent_score
date
tour
half_home_score
half_opp_score
attendance
referee_id
coach_id
captain_id
}
players (contains all players that played in the game) {
*game_id
*team_id
*player_id
position
number
}
tries, conversions, penalties, dropgoals {
*player_id
*game_id
*team_id
}
team {
team_id [PRIMARY KEY]
country
}
player {
player_id [PRIMARY KEY]
*team_id
name
surname
fullname
DOB
POB
school
height
weight
position
}
ich neige dazu, alle mit * _id der vom Typ (UNSIGNED INT [5]) zu machen? Ich bin ein bisschen unsicher, ob UNSIGNED
benötigt wird Der gesamte Text wird VARCHAR (500..200) in Abhängigkeit von der
Ich benutze DATE Typ benötigt Größe, wo ich kann zB. DOB, Datum
‚*‘ - bezieht sich auf Fremdschlüssel,
Eine Seite in anderen Tabellen Primärschlüssel sind besonders langsam, was passiert, ist die folgende:
Die Seite zeigt die Aufstellung der Spieler für das spezifische Spiel so sind meine Fragen die folgenden: id getTries (player_id, game_id) aus versucht
SELECT alle player_id ist, Anzahl, die Position von Spielern Tabelle WHERE game_id bestimmten Spiel der Tabelle ist . . getDropgoals (player_id, game_id) aus dropgoals Tabelle
getPlayerName (player_id) von Spieler Tabelle
Ausgabe auf Tabelle die empfangenen Details
<tr>
<td>tries</td>...<td>dropgoals</td><td>position</td><td>player's name</td><td>number</td></tr>
Ich würde es wirklich schätzen, wenn jemand darauf hinweisen könnte einige sichtbare Fallstricke.
Grüße
// bearbeiten
ich die folgende Abfrage verwendet haben, aber es gibt nur die Zeilen, die in der Tabelle versucht gefunden, ich es ausgeben möchten alle Spieler gefunden, aber nur die Zahl zählen Wenn er für diesen Spieler keine Versuche erzielte, muss er immer noch die Spielerdetails ausgeben, aber 0 für Versuche.
Ich bin nicht sicher, ob meine Frage richtig: SELECT ps.player_id, ps.position, ps.number, p.name, p.surname, COUNT (*) AS triesNo FROM Spieler ps, Spieler p, versucht WO p.player_id = ps.player_id UND ps.game_id = '$ game_id UND ps.team_id ist null und tries.player_id = ps.player_id GROUP BY ps.player_id ORDER BY ps.number
ich möchte es auch Zurückgeben eines Spielers, wenn er keine Versuche erzielt hat. Jetzt gibt er den Spieler nur zurück, wenn er einen Versuch erzielt hat.
Kann mir bitte jemand helfen?
Wie über die SQL Sie optimieren möchten veröffentlichen und die Ausgabe von EXPLAIN SELECT ... – Greg
scheint Ihre Struktur ziemlich geradlinig. Wie von Greg erwähnt, geben Sie spezifische Abfragen an, die langsam ausgeführt werden. Stellen Sie außerdem die Spalten mit Indizes bereit. – safoo