我正在建立一个允许人们在网上创建联盟的足球游戏。
假设一段时间后我有1000个联赛。我用sql存储数据。我应该:
1)用“名册”表创建一个单一数据库,并将所有联盟的所有球员插入其中(1000个联盟大约有350万到400万个条目)
2)创建一个包含20个表“名册1、名册2等”的单一数据库,并在这20个表之间分割联赛名册
3)为每个联盟创建一个数据库,每个数据库中有一个“名册”表
4)创建20个数据库,每个数据库中有一个表“名册”,并在20个数据库之间分割联赛名册。
性能和快速sql查询的最佳选择是什么?
最佳答案
听起来你需要学习一些数据库基础知识,首先,请花些时间确保你理解Database Normalization和indexes。
但是,原则上,您可能需要一个“players”表(player id,name,等等)、一个“花名册”表(花名册id,name,也许所有者id)和一个连接这两者的球员花名册映射(player id,花名册id)。您可能需要对player_id和lotters_id的组合值进行唯一约束,并且应该在映射表中对player_id和lotters_id都有外键约束。
(我假设每个球员名单上的球员并不是唯一的;如果有一些属性被拥有这些属性的人覆盖,你仍然可以用类似的方式建模,但我是根据我对模型描述的理解来猜测的。)
默认情况下,数据库引擎可能会为标记为主键的任何内容编制索引,也可能为标记为外键的任何内容编制索引,但这依赖于数据库,而且我不是mysql方面的专家;您需要做一些研究。
当您执行查询时,适当的索引将帮助您,在插入性能方面通常成本很低。如果最终得到大量相同的值,或者查询的利用率很高,其中只有一小部分值(例如时间范围),那么最终可能还需要了解分区。分区允许您获得处理大量记录的好处,而不必考虑非规范化会带来的建模问题。但是,不要过早地采取这一步骤;您可能会发现正确的数据库设计对于您所暗示的数据集大小来说已经足够了。
关于mysql - SQL数据库:使用一个包含3,5M条目的表或多个包含较少条目的表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6023925/