【发布时间】:2013-12-21 09:50:06
【问题描述】:
我正在构建一个应用程序来支持超过 200,000 个注册用户,并希望为每个用户添加地址簿功能以导入他们自己的联系人(例如姓名、地址、电子邮件等)。每个用户将有大约 150 个不同的联系人,每条记录有 10-15 个字段。
我的问题很简单:考虑到用户数量和每个用户的联系人数量,是为每个用户的通讯录创建单独的表,还是为关联的用户帐户创建一个带有 user_id 查找的单个表更好?
如果您能从性能角度解释原因,将不胜感激。
更新:规格
针对 cmets 中的问题,以下是规范:我将在 AWS RDS (http://aws.amazon.com/rds) 上托管数据库。这将主要是繁重的读取负载,而不是写入。当访问写入时,它将在 INSERT 和 UPDATE 之间取得平衡,几乎没有删除。想象一下您查看和编辑自己的通讯录的次数。
谢谢
【问题讨论】:
-
拥有一张表要好得多,因为它更容易检索和维护。不过,您可以稍后对表进行分区。几百万条记录对于mysql来说并不多
-
需要更多信息然后这个...什么 MySQL 版本?什么存储引擎?表描述会很好..它会是一个繁重的写入或繁重的读取应用程序还是两者兼而有之?以及基于 INSERTS、UPDATES 或 DELETES 的性能观点是什么??
-
您需要问自己一个简单的问题:您使用的是机械硬盘还是固态硬盘?差异是巨大的。但是,对于一个简单的答案 - 一张桌子更容易管理。每个用户都有一个表也违反了许多(逻辑偶数)规则。它基本上是0意义。这就像在一场大型比赛前 5 分钟朝自己的脚开枪,然后询问这是否是一个好举动。
-
@RaymondNijland 谢谢,请查看更新的答案。
-
@N.B.它是 Amazon RDS,所以我认为不太相关?
标签: mysql sql performance database-performance