sql 观看次数如何优化
How are sql views optimized
我知道 VIEW 只是一个存储的 SELECT 查询,无论何时被查询都是 运行。该 VIEW 将在原始 select 上有一个 where 子句列表。但是,我们也可以将 VIEW 作为普通查询 table。当我们以这种方式查询 VIEW 并在该查询中添加某些 where 子句时,最终的 select 实际上是 运行s,经过优化以包含查询中指定的 where 子句风景 ?还是首先执行视图,然后执行对 VIEW 的查询,从而导致 VIEW 中构成的行被处理两次?
较大的 DBMS(Oracle、SQL Server、MySQL 和 PostgreSQL)将结合视图和查询的过滤条件。
这是一种不需要 DBA 访问权限或知识的简单方法。
在非常大的 table 上创建视图。通过对某些字段进行一些操作来提高性能:
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;
您应该会立即得到结果(假设您直接查询 table 会立即得到结果)。
这表明未执行视图查询然后执行了查询过滤。如果有,结果不会更快。
注意:根据系统的不同,您可能必须清除查询之间的缓存才能获得有意义的结果。一种快速的方法是断开连接并重新连接。这样您就不必为如何清除缓存而困扰您的 DBA。如果他不知道答案,他会很生你的气.... ;-)
我知道 VIEW 只是一个存储的 SELECT 查询,无论何时被查询都是 运行。该 VIEW 将在原始 select 上有一个 where 子句列表。但是,我们也可以将 VIEW 作为普通查询 table。当我们以这种方式查询 VIEW 并在该查询中添加某些 where 子句时,最终的 select 实际上是 运行s,经过优化以包含查询中指定的 where 子句风景 ?还是首先执行视图,然后执行对 VIEW 的查询,从而导致 VIEW 中构成的行被处理两次?
较大的 DBMS(Oracle、SQL Server、MySQL 和 PostgreSQL)将结合视图和查询的过滤条件。
这是一种不需要 DBA 访问权限或知识的简单方法。
在非常大的 table 上创建视图。通过对某些字段进行一些操作来提高性能:
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;
您应该会立即得到结果(假设您直接查询 table 会立即得到结果)。
这表明未执行视图查询然后执行了查询过滤。如果有,结果不会更快。
注意:根据系统的不同,您可能必须清除查询之间的缓存才能获得有意义的结果。一种快速的方法是断开连接并重新连接。这样您就不必为如何清除缓存而困扰您的 DBA。如果他不知道答案,他会很生你的气.... ;-)