我真的很感激,如果你們中的一些可以幫助優化我的表,因爲它們目前採取非常長的時間執行,因爲以下問題:MySQL的 - 請幫助優化,我不知道如何
主表:
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
}
我傾向於做類型的所有* _id的(無符號整數[5])?我有點不確定,如果VARCHAR(500..200)根據需要
我用DATE類型在那裏我可以如大小需要UNSIGNED
所有文本。 DOB,日期
「*」 - 是指外鍵是主鍵在其他表
一個頁面特別慢,會發生什麼情況如下:玩家
頁面顯示的陣容對於特定的遊戲,所以我的查詢有以下幾種:
選擇所有player_id的,數目,位置從球員表WHERE game_id是從嘗試表 特定遊戲的ID getTries(player_id,game_id)。 。從球員表 getDropgoals(player_id,game_id)從dropgoals表
getPlayerName(player_id)
輸出到餐桌的接收細節
<tr>
<td>tries</td>...<td>dropgoals</td><td>position</td><td>player's name</td><td>number</td></tr>
我真的很感激,如果有人可以指出一些可見的陷阱。
問候
//編輯
我用下面的查詢,但它只輸出,在嘗試表中找到行,我希望它輸出找到的所有球員,但只算次數的嘗試,如果沒有對該玩家進行任何嘗試,那麼它仍然必須輸出玩家詳細信息,但是對於嘗試得分,則爲0。
我不確定我的查詢是否正確: SELECT ps.player_id,ps.position,ps.number,p.name,p.surname,COUNT(*)AS attemptsNo FROM players ps,player p,try WHERE p.player_id = ps.player_id AND ps.game_id ='$ game_id'AND ps.team_id IS NULL AND tries.player_id = ps.player_id GROUP BY ps.player_id ORDER BY ps.number
我也希望它也可以如果他沒有進行任何嘗試,就返回一名球員,但現在只有在他進行了一次嘗試後纔會返回球員。
任何人都可以幫忙嗎?
如何發佈你想優化的SQL和EXPLAIN SELECT的輸出...... – Greg 2009-07-08 15:58:22
你的結構看起來非常簡單。正如格雷格提到的那樣,給出特定的查詢運行緩慢此外,張貼有索引的列。 – safoo 2009-07-08 16:03:26