数据库设计:用户表拆分还是单表?

4

我只是想知道别人对这个问题的看法。我有一个项目,每个用户都有大量独特的信息。现在,假设没有冗余数据并且有大量用户,将数据分成更小的表是否会使它更快?

我试过进行1000个查询的测试,其中一个查询包含87列,另一个只存储登录信息。在第一个测试中,我得到了1372ms的结果,在第二个测试中,我得到了879ms的结果。乍一看似乎更快,但可能有人比我更有经验,可以提供他们的观点吗?


4
请问您能否在适当的位置添加一些大写字母和句号呢?最好将您的文字块转换成几个完整的句子。 - Albin Sunnanbo
你是在垂直方向(按列)分割表格,而不是水平方向(按用户)对吗?请提供更多关于你的测量的细节 - 最好是你使用的确切 DDL 和 DML SQL。 - Branko Dimitrijevic
Ok,MySQL InnoDB 数据库中有 240000 条数据,包含 87 个唯一的列。其中以用户名和 5 个外键作为索引。 - Netcfmx
@AlbinSunnanbo,虽然我同意你的观点,但考虑到你有26k的声望值,你可以通过编辑来改进问题。对于Netcfmx:请注意你的用词!如果你希望其他人花时间帮助你解决问题,我们至少希望你投入一些时间来构思一个好的、易读的问题! - thaJeztah
1个回答

6
在测试中,如果您使用“SELECT *”从大表和小表进行查询以返回所有列,则较大的表肯定需要更长的时间来返回更多的数据。然而,在生产应用程序中,您的应用程序中的查询应该是有针对性的,只返回您需要的列。
如果每个表具有相同的索引和过滤数据,并且每个表都返回相同的选定列,则结果集可能会在大致相同的时间内返回。但是,我应该补充说,当考虑性能测试时,时间可能非常具有误导性。数据库服务器有很多因素会不断变化,与您运行的查询无关,但绝对会影响其运行时间。除了时间作为一种测量方式之外,可以尝试查看逻辑读取。
至于您的设计问题,两种方法都可以在技术上起作用。但是,您可能想考虑特定数据需要被访问的频率,以帮助您的开发团队。如果有20%的列被80%的时间查询,您可能要考虑将它们放在自己的表中。这应该有助于避免新开发人员花费大量时间来筛选通常不重要的数据列,以确定他们想要查询的内容。
此外,从物理设计的角度来看,如果成本是一个问题,您可以将需要频繁访问的20%表放在性能更高的磁盘驱动器上,将80%数据放在性能较低的磁盘驱动器上。

很好,写得不错的答案,其中还有对OP的良好指引 :) - thaJeztah
非常好!谢谢。 - Netcfmx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接