Php MySQL-请帮助优化,我不知道如何优化

Php MySQL-请帮助优化,我不知道如何优化,php,mysql,query-optimization,Php,Mysql,Query Optimization,如果你们中的一些人能够帮助优化我的表,我将不胜感激,因为由于以下问题,这些表目前需要非常长的时间才能执行: 主表: 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 capta

如果你们中的一些人能够帮助优化我的表,我将不胜感激,因为由于以下问题,这些表目前需要非常长的时间才能执行:

主表:

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都设置为类型(UNSIGNED INT[5])?我有点不确定是否需要未签名

根据需要的大小,所有文本都是VARCHAR(500..200)

我可以使用日期类型,例如DOB、日期

“*”-指在其他表中作为主键的外键

一页特别慢,发生的情况如下:

该页面显示特定游戏的玩家阵容,因此我的查询如下:

从玩家表中选择所有玩家id、编号和位置,其中游戏id是特定游戏的id 表中的getTries(玩家id、游戏id) . . 从dropgoals表中获取dropgoals(玩家id、游戏id)

玩家表中获取玩家名称(玩家id)

将接收到的详细信息输出到表

<tr>
<td>tries</td>...<td>dropgoals</td><td>position</td><td>player's name</td><td>number</td></tr>

尝试…dropgoalspositionplayer的姓名号码
如果有人能指出一些明显的陷阱,我将不胜感激

问候

//编辑

我使用了下面的查询,但它只输出在Trys表中找到的行,我希望它输出找到的所有玩家,但只计算他得分的尝试次数,如果没有为该玩家得分,它仍然必须输出玩家详细信息,但对于得分的尝试,它必须输出0

我不确定我的查询是否正确: 选择ps.player_id、ps.position、ps.number、p.name、p.姓氏、COUNT(*)作为从玩家ps、玩家p、trytes中选择的triesNo,其中p.player_id=ps.player_id和ps.game_id='$game_id'和ps.team_id为空,trytes.player_id=ps.player_id按ps.player_id分组按ps.player_id按ps.number排序

我希望它也能在球员没有尝试得分时返回球员,现在它只会在球员尝试得分时返回球员


有人能帮忙吗?

Unsigned将使您拥有一个更大(两倍大小)的int-id列。缺点是,您将无法使用负ID(无论如何,这是邪恶的)。

从它的声音来看,您可能(a)在页面加载上运行过多查询,或者(b)如果同时从多个表中选择,则无法在适当的字段上连接数据

例如,根据您所说的,您似乎正在运行一整套查询以获取玩家姓名,但您可以将其与第一个查询合并,如下所示:

SELECT ps.player_id, ps.position, ps.number, p.name
FROM players ps, player p
WHERE p.player_id=ps.player_id
该查询连接了player_id上的两个表,最终得到一个id/position/number/name的player数组

您可能还需要查看索引。最好为WHERE子句中使用的任何字段(尚未使用主键索引的字段)编制索引


正如其他人所说,您需要更具体地说明哪些查询运行缓慢。

发布您要优化的SQL和解释选择的输出如何……您的结构看起来非常简单。正如Greg提到的,给出运行缓慢的特定查询。另外,发布有索引的列。但是unsigned对执行速度有任何影响吗?谢谢你的建设性意见,因为我完全忘记了合并这样的查询,我现在将尝试这样做,并返回一些仍然运行缓慢的查询。