在Oracel中,查询百万级以上的视图来更新另外一个表,是否合理?

有一个表,数量比较少,一般就几条或者几十条;
另外有一个视图,是百万级以上的数据量;
通过关键性的几个字段,查询数据,并将结果更新到表中的某个字段;
客户反馈说不合理,不能查询视图来更新,请问,该说法是否合理?

在Oracle数据库中,使用大量数据的视图来更新另一个表可能会导致性能问题。视图是一个虚拟表,它是从一个或多个基础表根据查询语句生成的。因此,当你查询一个包含百万级数据的视图时,实际上是在查询底层的表,这可能导致查询速度变慢,尤其是当涉及到多个大表和复杂的连接条件时。

客户反馈说不合理,不能查询视图来更新,这个说法并不完全正确。在Oracle中,你可以通过视图来更新基础表,但是需要满足以下条件:

    视图是可更新的。这意味着视图必须满足一定的要求,如不能包含聚合函数、distinct关键字等。

    视图的更新操作不会影响到其他表,导致数据不一致。

    然而,视图更新操作可能会导致性能问题,因为视图查询的底层表可能很大。在你的情况下,如果视图是可更新的,并且在性能上可接受,那么可以考虑继续使用视图进行更新。否则,你可以考虑以下几种方法来优化这个过程:

    对视图进行优化。检查底层查询是否可以进行优化,例如使用更有效的连接条件、索引等。

    使用物化视图。物化视图是一个实际的表,它存储了视图的数据。与普通视图相比,物化视图可以大大提高查询性能,因为数据已经被计算和存储在物化视图中。

    分批更新。将数据分成较小的批次进行处理,可以减轻数据库的压力,提高性能。

    总之,通过视图来更新表并不一定不合理,但是需要考虑视图的可更新性和性能。在实际操作中,应根据具体情况进行权衡,并尽量采用最优的方法来提高性能。

    …………

    回复:

    即使您的表不是视图的基础表,查询百万级的视图来更新表也可能会导致性能问题。这是因为视图查询的底层表可能很大,可能需要执行大量的IO操作和计算来获取所需的数据。因此,即使您的表不是视图的基础表,使用视图来更新表也可能会导致性能问题。

    如果您只是需要通过视图查询数据而不更新数据,也可能会受到相同的性能问题。如果您的查询涉及到大量的数据和复杂的连接条件,那么查询性能可能会很低。这也可能会影响到其他用户的查询操作。

    如果视图不能用于查询更新,您可以要求提供视图中的基础表,并使用基础表进行查询和更新操作。这将消除使用视图时可能遇到的性能问题,因为您可以直接查询和更新基础表。不过,在使用基础表之前,您需要确保查询和更新操作不会影响到其他表的数据完整性。

追问

您好大神,我的表并不是视图中的基础表;所以,我的更新,不会改变视图中的数据;客户认为,百万级的数据量视图,如果我以小表去做驱动,假设有50条,就会驱动大表50次;
但是,视图是他提供的,如果说我不用来更新,仅仅只是关联查询数据,是否也是一样的不合理?因为即使只是查询,小表驱动大视图,这个步骤是少不了的;如果说视图不能用于查询更新,是否我可以要求,他们提供视图中的基础表,我再来查询更新?

追答

见正文回复

温馨提示:答案为网友推荐,仅供参考
相似回答