2010-05-24 35 views
2

我有一些要求 mysql查询必须选择相同经常更新的数据集5-7 mysql表。 '选择'操作将比CUD多一点。哪个更好,创建物化视图还是新表?

我想创建一个表或物化视图来收集来自其他表的所有要求的列,以便将整个查询时间减少到不同的表,从而提高性能。

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

如果我创建物化视图,我担心如果性能可以大大提高。因为来自其他表格的数据变化非常频繁。很可能,在选择视图之前,可能需要首先创建视图。

任何想法?例如如何缓存?我可以做的其他额外措施?

+0

您是否适当地为表格编制索引?你有没有分析查看哪些查询速度慢?索引可能是关于性能的最重要的事情。 – 2010-05-24 23:57:05

+0

是的,我有适当的索引。但我希望表现会更好。你的意思是,如果我有适当的索引,不需要使用视图/额外的专用表来组合常用的列。 我认为将mutilple查询合并为一个可以节省查询性能。我只是不确定什么时候使用视图,什么时候创建一个额外的专用表 – Capitaine 2010-05-25 00:25:33

+0

什么是模式?数据如何被访问? – 2010-05-25 01:15:01

回答

0

在我看来,你正在考虑沿着“materialized view”概念的思路。

MySQL没有提供这方面的一个实现,虽然它可以与一些moreless复杂模拟(我做类似的PostgreSQL后来的东西 - 它的方便了那些经常在报告中使用复杂的非参数化查询,并且可以容忍不完全最新的数据)。

+0

是的。我的意思是物化视图。我的数据总是最新的。我有通过5-7表选择数据的非参数化查询。所以在我的情况下,创建物化视图和额外的表格似乎都不是提高性能的可行方案? – Capitaine 2010-05-25 01:00:27

+0

物化视图总是可行的,以获得更好的性能。但是,如果您真的需要严格的最新数据(即mat。view必须完全反映“true”视图),那么您需要使用触发器做额外的工作,就像我的第一个链接一样。 也许一些你的数据库模式的重新思考(也许甚至一些反规范化)可能更可取。 – leonbloy 2010-05-25 01:45:11

2

我想创建一个表或视图来收集其他表中所有要求很高的列,以提高性能。
很可能,在选择视图之前,可能需要每次创建视图。

视图只是查询。因此,无论您是使用查询来从视图中选择还是仅执行普通的sql,性能都将保持不变。

如何缓存

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

+0

因此,如果我比CUD有更多'选择',那么创建一个新表更适合于性能?否则,使用视图来组合表是好的? – Capitaine 2010-05-25 00:21:25

+0

nope。我们不知道如何提高你的特定情况下的性能,而我们不知道细节:存储的是什么类型的数据,查询的类型(最多的是:插入/更新/删除/选择),选择的类型典型查询),选择/修改比率,现在行数,数据增长速度,当前和预期负载等等。 – zerkms 2010-05-25 00:45:53

+0

查询速度是否慢?如果是这样,它是否完全索引? – 2010-05-25 12:05:15

0

如下所述,增加性能没有灵丹妙药。而且,与上述内容不同的是,索引是而不是对于数据库性能最重要的事情 - 拥有正确设置的数据库。随着数据库变大,数据库配置可能会成为性能的主导。其中最重要的是拥有适当配置的磁盘子系统,因为大型数据库的性能始终受限于数据传输到磁盘的速度有多快。

至于您的具体问题,通过查询伪造物化视图可能会帮助您,也可能不会帮助您。这可能会降低您的插入和更新性能,同时可能会提高您的选择性能。在需要时根据需要创建“视图”对你来说毫无用处,因为你必须运行缓慢的查询来创建它。由于MySQL不直接支持实现视图,因此标准视图对您无能为力。

没有更多的细节更好的帮助是不可能的。

相关问题