0

我将运动器材存储在 mysql 数据库中。目前我大约有 20,000 条记录,其中大约 3000 条是当前的固定装置(今年)。我需要定期访问、阅读和更新当前的灯具,我只需要定期访问旧的灯具。

所以我的计划是将当前的图片放在一张桌子上,然后将当前的灯具放在另一张桌子上:

固定装置_历史固定装置_当前

这是一个好的做法吗,我的理论是,当只有 3,000 个可能的结果时,我不想必须搜索 20,000 条记录。然后,当新赛季或新赛季开始时,我可以将当​​前赛程复制到历史表中并开始新的当前赛程。

这在实践中听起来不错,我的下一个问题是如何在两个表中搜索数据。我知道如何进行简单的连接,但考虑一下这个查询,我将如何同时查询matches_currentmatches_histroic。该查询本身已经是一个连接,所以它是连接的连接。看起来它可能会变得很混乱?

SELECT `m`.*, `h`.`name` AS  "homeTeam", `a`.`name` AS  "awayTeam", `o`.*
FROM `matches_current` m
JOIN `teams` `h` ON `m`.`home_team_id`=`h`.`team_id` 
JOIN `teams` `a` ON `m`.`away_team_id`=`a`.`team_id`
JOIN `outcomes` `o` ON `m`.`score_id`=`o`.`outcome_id`
WHERE `home_team_id`=1 AND `away_team_id`=2 
AND `m`.`score_id`>0 
ORDER BY `date` DESC

那么我所做的是正确的,还是应该将所有 20,000 条记录放在一个表中?

先感谢您,

艾伦。

4

2 回答 2

1

糟糕的想法。20,000 条记录并不是很多。您可能可以对数据使用一个体面的索引方案来做您想做的事情。而且,将相同的数据拆分到多个表中会给维护、安全、备份和数据完整性带来问题。

您对如此少量的记录执行此操作的唯一原因是记录大小非常大。因此,即使记录是 10,000 字节,那么表占用的总空间也只有 200 MB——按照数据库标准,这仍然很小。

如果您有更多行并且想要处理这种情况,我建议您对表进行分区而不是创建另一个表。

于 2013-08-16T22:22:41.340 回答
0

关于您的“第一个”问题,将“历史”和“当前”数据分开:

考虑到您将拥有如此少的行数,我认为这不会产生任何有益的影响。相反,这会使事情变得更加复杂......

于 2013-08-16T22:27:03.647 回答