我想知道最好的解决方案是什么(从性能角度来看)。我有一个Orders表,它可以有一个特定的OrderShipment关系。OrderShipment可以是普通的送货服务,也可以是服务点的送货服务(在荷兰,当你不在家的时候,比如超市、音像店等,它只是一个交货点)。
目前,我在Order表中使用HasOrderShipment字段来确定是否必须执行第二个查询才能获得发货。
当客户选择在服务点进行交付时,我需要存储此服务点的地址详细信息。现在我的问题是,从性能的角度来看,我是应该用地址字段扩展OrderShipment表(除了服务点交付之外,所有其他情况下这些字段都是空的),还是应该创建一个HasOrderShipmentServicePointAddress表来存储地址详细信息。
订单表大约有520万行,每天增加大约21.500个订单(平均从1月11日到1月23日)。
发布于 2011-01-24 23:01:49
你的查询是不是太慢了?如果是这样,请对其进行优化。如果没有,请不要担心。
现在,就你的具体问题而言,如果你有足够的数据,你可以构建一个汇总表。由于MySQL不支持物化视图(索引并存储在磁盘上的视图),因此添加视图在性能方面没有多大帮助(但有助于提高可读性)。相反,您可以添加一个汇总表。汇总表将是特定查询的结果。因此,不是将额外的列添加到规范化的表中,而是复制该表并将列添加到新的表中,然后使用触发器使其保持更新。我在一个单独的表中这样做的原因是,您仍然可以使用规格化表来强制执行引用完整性,并且对于使用规格化数据的查询更有效。但是您可以在需要进行复杂连接的查询中使用汇总表(基本上是预先计算连接)。
但我再强调一次,除非迫不得已,否则不要想着做这样的事情。首先尝试正常的优化路由(索引、EXPLAIN、重写查询、更多的ram等)。使用汇总表作为最后的手段...
https://stackoverflow.com/questions/4779835
复制相似问题