我有一些要求的mysql查询,必须从 5-7 mysql表中选择相同的经常更新的数据集。 '选择'操作将比CUD多一点。
我正在考虑创建一个表或物化视图来从其他表中收集所有要求严格的列,以便减少对不同表的总体查询时间,从而提高性能。
如果我创建该表,我可能需要在每次更新其他表时执行额外的插入/更新/删除操作。
如果我创建物化视图,我担心性能是否可以大大提高。因为来自其他表的数据变化非常频繁。最有可能的是,可能需要在每次选择之前首先创建视图。
有什么想法吗?例如怎么缓存?我可以采取其他额外措施吗?
答案 0 :(得分:2)
我正在考虑创建一个表或视图来从其他表中收集所有要求的列,以便提高性能 最有可能的是,可能需要在每次选择之前首先创建视图。
视图只是查询。所以无论你是从视图中选择查询还是只执行普通的sql都没关系 - 性能将是相同的。
如何缓存
缓存是一个非常复杂和具体的问题。所以没有灵丹妙药,决定应该提供更多细节。
答案 1 :(得分:0)
在我看来,你正在思考“materialized view”概念。
Mysql没有提供这方面的实现,虽然它可以用一些more或less复杂度进行模拟(我在Postgresql中做了类似的事情 - 它对于复杂的非参数化查询很方便报告中经常使用的,并且可以容忍没有完全最新的数据。
答案 2 :(得分:0)
如下所述,没有提高性能的灵丹妙药。并且,与上述内容不同,索引不对于数据库性能而言是最重要的 - 拥有正确设置的数据库。随着数据库变得越来越大,数据库配置可能会占据主导地位。最重要的是拥有一个适当配置的磁盘子系统,因为大型数据库的性能总是受到数据传输到磁盘或从磁盘传输速度的限制。
至于您的具体问题,通过查询伪造物化视图可能会也可能不会对您有所帮助。它可能会降低插入速度并更新性能,同时可能会提高您的选择性能。在需要时根据需要创建“视图”对您来说绝对没有任何意义,因为您不得不运行慢速查询来创建它。由于MySQL不直接支持实现视图,因此标准视图对您无效。
如果没有更多细节,就无法提供更好的帮助。