Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 元组长度何时过长?_Mysql_Tuples_Schema - Fatal编程技术网

Mysql 元组长度何时过长?

Mysql 元组长度何时过长?,mysql,tuples,schema,Mysql,Tuples,Schema,以下是我的最大关系的逻辑模式: {(id、uName、补给品、分数、玩家类型、储存补给品、补给站、兵营、军械库、机库、无人驾驶飞机库、储存、进攻、防御、步兵、车辆、空中、燃料、探险、士气、现金、人口、税收、食品、aSector、cSector、iSector、XP) 如您所见,每个元组都将非常长。随着属性的增加,这开始变得非常麻烦。问题是,只有一对一的关系,所以虽然它可以通过将这种关系分解为更小的、元相关的关系来帮助组织和避免混淆,但它不会增加更多的开销吗?或者我不应该担心mysql的效率,因为

以下是我的最大关系的逻辑模式:

{(id、uName、补给品、分数、玩家类型、储存补给品、补给站、兵营、军械库、机库、无人驾驶飞机库、储存、进攻、防御、步兵、车辆、空中、燃料、探险、士气、现金、人口、税收、食品、aSector、cSector、iSector、XP)

如您所见,每个元组都将非常长。随着属性的增加,这开始变得非常麻烦。问题是,只有一对一的关系,所以虽然它可以通过将这种关系分解为更小的、元相关的关系来帮助组织和避免混淆,但它不会增加更多的开销吗?或者我不应该担心mysql的效率,因为这种关系实际上最多会有上万个元组。

1)假设您的表最多有10k行,很少更新和很少读取(与数据库中的其他实体相比)-您是对的,效率不会有太大的好处,但是

2) 一点一滴都很重要;例如,对于这个小表,它的大部分可以保存在内存中,您将有非常快的选择;如果很多属性大部分是空的,那么拆分表将减少表的大小,并为其他缓存释放RAM;在更新时减少必要的I/O(通常使事情更具可伸缩性)。费用是复杂性的略微增加(对于更新,选择可以使用视图)

3) 拆分1对1关系的“开销”是一种误解;这在很大程度上取决于工作负载-您可以构建案例,将事情分解为两个较小的表,并且您可以构建案例,从将数据存储在一个表中获益

表的内部表示的最大行大小为 65535字节

效率取决于MySQL版本和您使用的存储引擎。但您应该知道,这样做会增加可能不必要的缓存数据

例如,如果我们添加用户的地址数据,
Users
表可能会增加,并且该数据可能不经常需要,因此,将其拆分为两个表:
Users
Users\u address
,效率会更高,因为如果表用户大量读取,则可以缓存


还有其他考虑事项,如维护和索引工作。

10k行几乎不可能是一个问题,即使是最糟糕的查询,也没有索引。那么您个人会将所有这些用户属性放在一个长表中,还是将它们组织成几个?我肯定会从最明显的解决方案开始,是的。没有人能够预测瓶颈,即使是像twitter和facebook这样的大型负载项目,在经过大量测量和盈利后,也会反复改进其模式。即使像他们这样聪明的工程师也无法预测未来的问题,所以只要问题出现,他们就会解决。谢谢你的回答。我不确定是什么构成了很少读/写,但数据库是用PHP编程的在线游戏的存储,大多数脚本总是与这个表交互,所以我想说,当成千上万的玩家在玩时,它可以被大量使用。很好的回答,一些伟大的事情要考虑。谢谢。很少读和写是相对比较另一个表-让我们说,球员移动单位和每一个动作都写进了数据库。这将是一个经常被写入的表。或者一张记录所有玩家所有动作的表格。相比之下(取决于游戏类型),用户和他们的统计数据可能不需要太多的阅读和书写。