Database design 创建物化视图还是创建新表更好?

Database design 创建物化视图还是创建新表更好?,database-design,mysql,schema,database-schema,Database Design,Mysql,Schema,Database Schema,我有一些要求很高的mysql查询,它们必须从5-7mysql表中选择相同的频繁更新的数据集“选择”操作将比CUD稍微复杂一些 我正在考虑创建一个表或物化视图来收集其他表中所有需要的列,以便减少对不同表的总体查询时间,从而提高性能 如果我创建了那个表,每次更新其他表时,我可能需要执行额外的插入/更新/删除操作 如果我创建物化视图,我担心性能是否会有很大提高。因为来自其他表的数据变化非常频繁。很可能,每次选择视图之前都需要先创建视图 有什么想法吗?e、 如何缓存?我能做的其他额外措施 我正在考虑创建

我有一些要求很高的mysql查询,它们必须从5-7mysql表中选择相同的频繁更新的数据集“选择”操作将比CUD稍微复杂一些

我正在考虑创建一个表或物化视图来收集其他表中所有需要的列,以便减少对不同表的总体查询时间,从而提高性能

如果我创建了那个表,每次更新其他表时,我可能需要执行额外的插入/更新/删除操作

如果我创建物化视图,我担心性能是否会有很大提高。因为来自其他表的数据变化非常频繁。很可能,每次选择视图之前都需要先创建视图

有什么想法吗?e、 如何缓存?我能做的其他额外措施

我正在考虑创建一个表或视图,以收集其他表中所有需要的列,从而提高性能。
很可能,每次选择视图之前都需要先创建视图

视图只不过是查询。因此,无论您是从视图中查询选择,还是只执行普通sql,性能都是一样的

如何缓存


缓存是一个非常复杂和具体的问题。因此,没有灵丹妙药,为了做出决定,应该提供更多的细节。

在我看来,您的想法似乎与“”概念一致


Mysql没有提供这方面的实现,尽管它可以进行一些或复杂的模拟(我在Postgresql中做了一些类似的事情-它对于复杂的非参数化查询非常方便,这些查询经常在报告中使用,并且没有完全最新的数据是可以接受的)。

如下所述,提高性能没有灵丹妙药。而且,与上面所说的不同,索引并不是DB性能的最重要因素——正确设置数据库是最重要的。随着数据库变得越来越大,数据库配置可能会主导性能。其中最重要的一点是拥有一个适当配置的磁盘子系统,因为大型数据库的性能总是受到磁盘上数据传输速度的限制

至于您的具体问题,通过查询伪造物化视图可能会也可能不会对您有所帮助。这可能会降低插入和更新性能,同时可能会提高select性能。在需要时按需创建“视图”对您毫无帮助,因为您必须运行缓慢的查询来创建它。因为MySQL不直接支持物化视图,所以标准视图对您没有任何帮助


如果没有更多的细节,就不可能提供更好的帮助。

您是否对这些表进行了适当的索引?您是否分析过哪些查询比较慢?索引可能是关于性能的最重要的东西。是的,我有适当的索引。但我希望性能进一步提高。您的意思是,如果我有适当的索引,就不需要使用view/额外的专用表来组合常用的列吗?我认为将多个查询组合成一个查询可以节省查询性能。我只是不确定什么时候使用视图,什么时候为它创建一个额外的专用表模式是什么?数据是如何访问的?因此,如果我有比CUD更多的“选择”,那么创建一个新表更适合于性能?否则,使用视图合并表就可以了?不可以。我们不知道如何在特定情况下提高性能,但我们不知道细节:存储的数据类型、查询类型(最多:插入/更新/删除/选择)、选择类型(典型查询)、选择/修改比率、当前行数、数据增长速度、当前和预期负载,etc的查询速度慢吗?如果是,它是否完全索引?是。我的意思是物化视图。我的数据总是最新的。我有一个非参数化查询,通过5-7个表选择数据。所以在我的例子中,创建物化视图和额外的表似乎都不是获得更好性能的可行选项?物化视图总是能够获得更好的性能。但是,如果您确实需要严格的最新数据(即mat.视图必须准确反映“真实”视图),那么您需要对触发器进行额外的工作,如我的第一个链接中所述。也许重新考虑一下您的数据库模式(甚至可能是去规范化)会更好。