2

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

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

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

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

有任何想法吗?例如如何缓存?我还能采取其他额外措施吗?

4

3 回答 3

2

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

视图不过是查询。因此,无论您是进行查询以从视图中选择还是只执行普通的 sql 都没关系 - 性能将是相同的。

如何缓存

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

于 2010-05-24T23:56:55.583 回答
0

在我看来,您正在按照“物化视图”概念进行思考。

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

于 2010-05-25T00:45:36.607 回答
0

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

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

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

于 2010-05-25T01:11:29.970 回答