如何优化sql视图

时间:2015-01-30 15:18:11

标签: sql oracle optimization view

我知道VIEW只是一个存储的SELECT查询,只要查询它就会运行。该VIEW将列出原始选择中的where子句。但是,我们也可以将VIEW查询为普通表。当我们以这种方式查询VIEW,并且我们在该查询中添加某些where子句时,是实际运行的最终选择,是否优化以包括通过VIEW在查询中指定的where子句?或者视图首先执行,然后查询VIEW执行,从而导致在VIEW中构成的行被处理两次?

1 个答案:

答案 0 :(得分:1)

较大的DBMS(Oracle,SQL Server,MySQL和PostgreSQL)将结合视图和查询的过滤条件。

这是一种简单的方法,可以告诉您不需要DBA访问或知识。

在非常大的表上创建视图。通过对某些字段进行一些操作来达到性能:

create view Test as
select  A, B, C, Mod( A, B ) as Dummy1, Mod( A, C ) as Dummy1, etc.
from    TableWithLotsAndLotsOfRows
where   Mod( A, B ) > 0 or Mod( A, C ) > 0;

对视图执行打开查询:

select * from Test;

在看到任何结果之前应该有一个有意义的暂停。希望它会持续几分钟 - 越长越好(达到一定程度!)。

现在使用将结果集限制为一行或几行的条件过滤视图查询:

select * from Test where ID = 123456;

你应该立即得到一个结果(假设你直接查询表格会立即获得结果)。

这表明视图查询未执行然后执行查询过滤。如果有,结果就不会更快。

注意:根据系统的不同,您可能必须清除查询之间的缓存才能获得有意义的结果。一种快速的方法是断开连接并重新连接。然后,您不必打扰您的DBA如何清除缓存。如果他不知道答案,他会非常沮丧....; - )