2013-03-16 47 views
3

我只是想看看别人怎么看待这个问题。我有一个项目,每个用户都有相当多的独特信息。现在,鉴于没有冗余,并且有大量的用户 - 将数据分成更小的表格会使其更快吗?数据库设计用户表拆分或单个

我确实试过1000个查询,其中一个有87个列,另一个只有登录信息分开存储。在我得到了1372ms,其他879ms;似乎一眼就看得更快,但是可能有人比我有更多的经验,并且可以在这方面给出他们的观点?

+4

你能否在这里和那里插入一些大写字母和句号?最好将你的单词块转换成句子。 – 2013-03-16 09:25:21

+0

您已经垂直分割表格(按列),而不是水平分割(由用户),对吗?请提供有关您的测量的更多详细信息 - 最好是您使用的确切的DDL和DML SQL。 – 2013-03-16 10:35:36

+0

确定mysql inodb 240000个条目87个唯一的数据列。索引用户名和5前钥匙 – Netcfmx 2013-03-16 12:26:20

回答

3

在您的测试,如果从大的和小桌子使用“SELECT *”,返回所有列的查询,那么是的,当然大表会因为它有返回更多的数据需要更长的时间。但是,在生产应用程序中,应用程序中的查询应作为目标,仅返回所需的列。

如果每个表具有相同的索引和正在过滤的数据,并且每个表都返回相同的选定列,则结果集应该可能大致在相同时间内返回。但是,我应该补充一点,考虑到性能测试,时间可能会非常具有误导性。数据库服务器的许多因素会不断变化,并且与您正在运行的查询无关,但绝对会影响其运行时间。而不是时间作为衡量标准,请尝试查看逻辑读取。

至于你的设计问题,无论哪种方式将技术上的工作。但是,您可能需要考虑为了帮助其他开发团队而需要访问特定数据的频率。如果有80%的时间查询了20%的列,那么您可能需要考虑将这些列放在自己的表中。这应该有助于避免新开发人员花费大量时间来筛选通常不重要的数据列,以确定他们想要查询的内容。

此外,从物理设计的角度来看,你可以放置需要对更高性能的磁盘驱动器上的较低性能的磁盘驱动器的80点%的数据频繁访问,如果成本是一个问题的20%表。

+0

好的,写得很好的答案,好的指针为OP :) – thaJeztah 2013-03-16 13:28:48

+0

非常好!谢谢。 – Netcfmx 2013-03-16 17:02:48