猿问

哪个效率更高:多个MySQL表还是一个大表?

我在MySQL数据库中存储了各种用户详细信息。最初,它是在各种表中设置的,这意味着数据与UserId链接,并通过有时复杂的调用输出,以根据需要显示和操作数据。建立一个新系统,将所有这些表组合成一个大的相关内容表几乎是有意义的。

  • 这将是帮助还是阻碍?

  • 调用,更新或搜索/操作时的速度考虑?

这是我的一些表结构的示例:

  • 用户-用户ID,用户名,电子邮件,加密的密码,注册日期,IP

  • user_details-Cookie数据,姓名,地址,联系方式,从属关系,人口统计数据

  • user_activity-贡献,最近一次在线访问,最后一次查看

  • user_settings-配置文件显示设置

  • user_interests-广告可定位变量

  • user_levels-访问权限

  • user_stats-匹配数


编辑:到目前为止,我已经对所有答案进行了投票,它们都有本质上可以回答我问题的元素。

大多数表具有1:1的关系,这是使它们归一化的主要原因。

如果表格跨越100多个列,而这些单元格的大部分可能仍为空时,会不会有问题?


UYOU
浏览 726回答 3
3回答

慕雪6442864

多个表以下列方式/案例提供帮助:(a)如果不同的人要开发涉及不同表的应用程序,则将它们拆分是有意义的。(b)如果您想为不同的人赋予不同的权限,以进行数据收集的不同部分,则拆分它们可能更为方便。(当然,您可以查看定义视图并对其进行适当授权)。(c)为了将数据移动到不同的地方,尤其是在开发过程中,使用表来减小文件大小可能是有意义的。(d)在基于单个实体的特定数据收集开发应用程序时,较小的占地面积可能会给您带来舒适感。(e)这是一种可能性:您认为作为单个值的数据将来可能会变成真正的多个值。例如,信用额度到目前为止是单个值字段。但是明天,您可能会决定将值更改为(日期从,日期到,信用值)。拆分表现在可能会派上用场。我的投票将是针对多个表-数据已适当拆分。

HUWWW

合并表称为非规范化。可能会(或可能不会)使某些查询(使很多JOINs)更快地运行,而以创建维护地狱为代价。MySQL只能使用JOIN方法,即NESTED LOOPS。这意味着对于驱动表中的每个记录,MySQL在循环中在驱动表中找到匹配的记录。查找记录是相当昂贵的操作,可能需要花费纯记录扫描数十倍的时间。将所有记录移到一个表中将帮助您摆脱此操作,但是表本身会变大,并且表扫描需要更长的时间。如果其他表中有很多记录,则表扫描的增加可能会增加按顺序扫描记录的好处。另一方面,可以保证维护。

智慧大石

他们都是1:1的关系吗?我的意思是,如果某个用户可以属于不同的用户级别,或者如果用户兴趣在用户兴趣表中表示为多个记录,那么合并这些表将立即成为问题。关于以前关于规范化的答案,必须说数据库规范化规则完全忽略了性能,而只是在看什么是整洁的数据库设计。这通常是您想要实现的目标,但是有时在追求性能方面积极地规范化是有意义的。总而言之,我要说的问题归结为表中有多少个字段,以及它们被访问的频率。如果用户活动通常不是很有趣,那么出于性能和维护的原因,始终将其保留在同一记录上可能会很麻烦。如果经常访问某些数据(例如设置),但仅包含太多字段,则合并表可能也不方便。如果仅对性能提高感兴趣,则可以考虑其他方法,例如将设置分开,但将其保存在自己的会话变量中,这样就不必经常查询数据库。
随时随地看视频慕课网APP

相关分类

MySQL
我要回答