首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是创建一个左连接还是向某个表中添加一些额外的列?

是创建一个左连接还是向某个表中添加一些额外的列?
EN

Stack Overflow用户
提问于 2011-01-24 16:05:46
回答 1查看 817关注 0票数 0

我想知道最好的解决方案是什么(从性能角度来看)。我有一个Orders表,它可以有一个特定的OrderShipment关系。OrderShipment可以是普通的送货服务,也可以是服务点的送货服务(在荷兰,当你不在家的时候,比如超市、音像店等,它只是一个交货点)。

目前,我在Order表中使用HasOrderShipment字段来确定是否必须执行第二个查询才能获得发货。

当客户选择在服务点进行交付时,我需要存储此服务点的地址详细信息。现在我的问题是,从性能的角度来看,我是应该用地址字段扩展OrderShipment表(除了服务点交付之外,所有其他情况下这些字段都是空的),还是应该创建一个HasOrderShipmentServicePointAddress表来存储地址详细信息。

订单表大约有520万行,每天增加大约21.500个订单(平均从1月11日到1月23日)。

EN

回答 1

Stack Overflow用户

发布于 2011-01-24 23:01:49

你的查询是不是太慢了?如果是这样,请对其进行优化。如果没有,请不要担心。

现在,就你的具体问题而言,如果你有足够的数据,你可以构建一个汇总表。由于MySQL不支持物化视图(索引并存储在磁盘上的视图),因此添加视图在性能方面没有多大帮助(但有助于提高可读性)。相反,您可以添加一个汇总表。汇总表将是特定查询的结果。因此,不是将额外的列添加到规范化的表中,而是复制该表并将列添加到新的表中,然后使用触发器使其保持更新。我在一个单独的表中这样做的原因是,您仍然可以使用规格化表来强制执行引用完整性,并且对于使用规格化数据的查询更有效。但是您可以在需要进行复杂连接的查询中使用汇总表(基本上是预先计算连接)。

但我再强调一次,除非迫不得已,否则不要想着做这样的事情。首先尝试正常的优化路由(索引、EXPLAIN、重写查询、更多的ram等)。使用汇总表作为最后的手段...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4779835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档