2016-02-22 76 views
0

可以说我正在处理大量的数据(数千或数百万条记录)。并且让我们说有一些我需要经常访问的关系。例如:MySQL - 快速访问关系

user: 
    id 
    name 
    phone 

addresses: 
    street 
    city 
    state 
    user_id 
    primary (tinyint) 
    zip_code 

不是最好的例子,但可以说我发现我总是需要抢zip_code对于一些计算方便用户的主要地址。这个数据集有数十万个用户和地址。 ALSOUser表中存储了zip_code,这样我就不会减慢带有Join的这样一小段数据的查询吗?

对我来说,似乎这可能会有问题,因为你不再有规范化的数据。但是,我很好奇是否可以提高海量数据集的性能。也许,你会保持那些'重复'列与触发器同步?

+0

只要您有适合的索引,用'addresses'表连接的性能损失应该是极小子。如果您不想通过此连接将所有查询复杂化,则可以为其创建一个视图。 – Barmar

+0

@Barmar感谢您的信息。如果我需要的是两个或三个关系?我明白到最后,我只需做一些测试,看看它是如何发展的。但我想知道人们通常是通过“复制”数据来解决这个问题,以便它们更接近,或者他们只是处理远距离关系和多个连接 – djt

+0

有时他们会这样做,如果依赖关系的查询非常频繁并且连接的表现是一个问题。但是,您应该首先尝试按照正常方式进行操作,并且只有在确定无法通过这种方式获得所需的性能时才添加优化。 – Barmar

回答

-2

如果用户只能拥有一个地址,那么您的模式没有被标准化。如果用户可以拥有零个或一个地址,那么将其作为单个表进行实施是非常有必要的,但是如果用户可以拥有多个地址,则用户不能拥有一个邮政编码属性。即你的问题是没有意义的。

(BTW不是每个人会考虑一百万+记录了“数额较大”)

+0

请参阅我介绍的架构。用户有很多地址。有一个tinyint指定它是否是它们的主要属性。根据我的问题,我需要得到最多的数据是主地址的邮政编码。这就是为什么我询问如何将地址表存储在用户表中 – djt