假设我有一个表示用户的表:id, name。这个表很大,大约一亿行。用户也有一些属性,比如说“出生之城”。这是一个可选字段,所以只有一小部分用户(,比方说只有5%的)提供了它。所以我也有一个与城市的桌子:id, name。关系是1比多--用户只能有一个城市,而一个城市可以是许多用户的双轨制。
问题是:如何将它们连接起来?
( a)向users表中添加列city_id。(对于没有财产的用户来说,这是九千五百万的空白处)
( b)创建第三个连接表user_city: user_id,city_id (目的是省略大量的NULL(如果a)。
另外,请记住,应用程序需要
select user.name ... where city_id=xxx所以在任何情况下都需要对city_id列进行索引。
发布于 2011-12-18 11:07:21
因为任何非外星用户只有一个出生城市(除非他是在出租车上出生的),用用户ID索引出生城市的表似乎既愚蠢又浪费。我会把出生城市放在用户表中,尽管大多数城市字段都是空的。
但是,忘了我的观点,这是经典的时间和空间问题,空间考虑是数以百万计的无关的、无用的零值;而额外的时间是数以百万计的无关的、无用的选择进入城市桌子。
你对这个问题的解决方案告诉了你什么?
https://stackoverflow.com/questions/8551203
复制相似问题