为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2019-12-13 09:00:01
我在MySQL数据库中存储了各种用户详细信息。最初,它是在各种表中设置的,这意味着数据与UserId链接,并通过有时复杂的调用输出,以根据需要显示和操作数据。建立一个新系统,将所有这些表组合成一个大的相关内容表几乎是有意义的。这将是帮助还是阻碍?调用,更新或搜索/操作时的速度考虑?这是我的一些表结构的示例:用户-用户ID,用户名,电子邮件,加密的密码,注册日期,IPuser_details-Cookie数据,姓名,地址,联系方式,从属关系,人口统计数据user_activity-贡献,最近一次在线访问,最后一次查看user_settings-配置文件显示设置user_interests-广告可定位变量user_levels-访问权限user_stats-匹配数编辑:到目前为止,我已经对所有答案进行了投票,它们都有本质上可以回答我问题的元素。大多数表具有1:1的关系,这是使它们归一化的主要原因。如果表格跨越100多个列,而这些单元格的大部分可能仍为空时,会不会有问题?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

多个表以下列方式/案例提供帮助:

(a)如果不同的人要开发涉及不同表的应用程序,则将它们拆分是有意义的。

(b)如果您想为不同的人赋予不同的权限,以进行数据收集的不同部分,则拆分它们可能更为方便。(当然,您可以查看定义视图并对其进行适当授权)。

(c)为了将数据移动到不同的地方,尤其是在开发过程中,使用表来减小文件大小可能是有意义的。

(d)在基于单个实体的特定数据收集开发应用程序时,较小的占地面积可能会给您带来舒适感。

(e)这是一种可能性:您认为作为单个值的数据将来可能会变成真正的多个值。例如,信用额度到目前为止是单个值字段。但是明天,您可能会决定将值更改为(日期从,日期到,信用值)。拆分表现在可能会派上用场。

我的投票将是针对多个表-数据已适当拆分。


查看完整回答
反对 回复 2019-12-13
?
HUWWW

TA贡献1874条经验 获得超12个赞

合并表称为非规范化。

可能会(或可能不会)使某些查询(使很多JOINs)更快地运行,而以创建维护地狱为代价。

MySQL只能使用JOIN方法,即NESTED LOOPS

这意味着对于驱动表中的每个记录,MySQL在循环中在驱动表中找到匹配的记录。

查找记录是相当昂贵的操作,可能需要花费纯记录扫描数十倍的时间。

将所有记录移到一个表中将帮助您摆脱此操作,但是表本身会变大,并且表扫描需要更长的时间。

如果其他表中有很多记录,则表扫描的增加可能会增加按顺序扫描记录的好处。

另一方面,可以保证维护。


查看完整回答
反对 回复 2019-12-13
?
智慧大石

TA贡献1946条经验 获得超3个赞

他们都是1:1的关系吗?我的意思是,如果某个用户可以属于不同的用户级别,或者如果用户兴趣在用户兴趣表中表示为多个记录,那么合并这些表将立即成为问题。

关于以前关于规范化的答案,必须说数据库规范化规则完全忽略了性能,而只是在看什么是整洁的数据库设计。这通常是您想要实现的目标,但是有时在追求性能方面积极地规范化是有意义的。

总而言之,我要说的问题归结为表中有多少个字段,以及它们被访问的频率。如果用户活动通常不是很有趣,那么出于性能维护的原因,始终将其保留在同一记录上可能会很麻烦。如果经常访问某些数据(例如设置),但仅包含太多字段,则合并表可能也不方便。如果仅对性能提高感兴趣,则可以考虑其他方法,例如将设置分开,但将其保存在自己的会话变量中,这样就不必经常查询数据库。


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 725 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信