Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 系统对象 » 系统过程 » 按字母顺排序的系统过程列表

 

sa_materialized_view_info 系统过程

返回指定的实例化视图的信息。

语法
sa_materialized_view_info( 
[ view_name 
[, owner_name ] ] 
)
参数
  • view_name   使用此可选的 CHAR(128) 参数指定要为其返回信息的实现化视图 (Materialized View) 的名称。

  • owner_name   使用此可选的 CHAR(128) 参数指定实现化视图 (Materialized View) 的所有者。

注释

如果 view_nameowner_name 都未指定,则返回有关数据库中所有实例化视图的信息。

如果 owner_name 未指定,则返回所有名为 view_name 的实例化视图信息。

sa_materialized_view_info 系统过程返回实例化视图的以下信息:

列名 数据类型 说明
OwnerName CHAR(128) 视图的所有者。
viewname CHAR(128) 视图的名称。
Status CHAR(1)

视图的状态信息。可能的值为:

  • D   禁用

  • E   enabled

DataStatus CHAR(1)

视图中数据的状态信息。可能的值为:

  • E   上次尝试刷新过程中出现错误。视图已启用,但未初始化。

  • F   自上次刷新后,基础表未发生更改,因此认为此视图为最新视图。视图已启用且已初始化。

  • N   视图尚未初始化。下列其中一项为真时会出现这种情况:

    • 视图自创建以来从未刷新

    • 数据已从视图中截断

    • 视图被禁用

  • S   自上次刷新后基础表已更改,因此认为此视图失效。视图已启用且已初始化。

ViewLastRefreshed TIMESTAMP

上次刷新视图时的时间。如果 ViewLastRefreshed 值为 NULL,则视图尚未初始化。

DataLastModified TIMESTAMP

针对失效视图,上次修改基础数据的时间。

对于未初始化的视图,或认为未失效的视图,其值为 NULL。

AvailForOptimization CHAR(1)

有关视图供优化程序使用的可用性信息。可能的值为:

  • D   禁止优化程序使用视图。视图所有者不允许优化程序使用该视图。

  • I   由于某些内部原因(如视图定义不符合所需的条件),优化程序可能无法使用视图。但所有者并未显式禁止优化程序使用该视图。

  • N   因为尚未刷新或刷新失败,所以视图不包含任何数据。视图所有者允许优化程序使用该视图,但视图未初始化。

  • O   当前连接中存在不兼容的选项值。该视图可供优化程序使用,并且其定义满足所有要求的条件,但当前选项设置与创建视图所使用的选项设置不兼容。

  • Y   优化程序可以使用视图。视图所有者允许优化程序使用该视图,并且视图定义满足优化程序使用时需要的所有条件。

有关优化程序是否选择实例化视图以及如何选择的详细信息,请参见使用实例化视图提高性能

RefreshType CHAR(1)

视图的刷新类型。可能的值为:

  • I   视图为快速视图。基础表中的数据更改影响到实例化视图中的数据时,快速视图立即刷新。

  • M   视图为手动视图。手动视图需要手动刷新,例如可以使用 REFRESH MATERIALIZED VIEW 语句或 sa_refresh_materialized_views 系统过程刷新视图。

有关手工视图和快速视图的详细信息,请参见手动和快速实例化视图

对于确定由于视图定义问题而优化程序永不考虑使用的实例化视图列表,此过程非常有用。对于这些实现化视图 (Materialized View),AvailForOptimization 值为 I。要进一步了解有关实例化视图定义的限制,请参见实例化视图的限制

下表显示如何确定 AvailForOptimization 属性。从左列开始逐行读取,查看为了能够产生 AvailForOptimization 列中找到的值而必须满足的条件。

用户是否允许视图在优化中使用? 视图定义是否满足使用所需的所有条件? 连接选项是否与使用视图所需的选项相匹配? 视图是否初始化? AvailForOptimization 值
Y
N/A N/A N/A D
N/A I
N/A N/A N
O

经过初始化的实例化视图可以为空。满足实例化视图定义的基础表中没有数据时会出现这种情况。空视图不视为与未初始化的实例化视图相同,虽然该视图中也没有数据。可以使用 ViewLastRefreshed 属性的值区分该视图是尚未初始化 (NULL),还是由于基础表中没有数据而为空(非 NULL)。

权限

DBA 权限,或对 DBO 拥有的过程的执行权限。

副作用

指定实例化视图的所有元数据和所有依赖性都将装载到数据库服务器高速缓存中。

另请参见
示例

下列语句返回有关数据库中所有实例化视图的信息:

SELECT *
   FROM sa_materialized_view_info();

可将 sa_materialized_view_info 系统过程的结果与 sa_materialized_view_can_be_immediate 系统过程的结果相结合,以返回状态信息以及视图是否满足成为快速视图的条件。执行以下语句可创建为此示例检查的实例化视图:

CREATE MATERIALIZED VIEW view0 AS ( 
   SELECT ID, Name, Description, Size 
   FROM Products 
   WHERE Quantity > 0 );
CREATE UNIQUE INDEX u_view0 
   ON view0( ID );
ALTER MATERIALIZED VIEW view0 
   IMMEDIATE REFRESH;
CREATE MATERIALIZED VIEW view00 AS (
   SELECT ID, Name, Description, Size 
   FROM Products 
   WHERE Quantity <= 0 );
CREATE UNIQUE INDEX u_view00 
   ON view00( ID );
CREATE MATERIALIZED VIEW view1 AS (
   SELECT ID, Name, Description, Size 
   FROM Products 
   WHERE Quantity = 0 );
ALTER MATERIALIZED VIEW view1 
   DISABLE;
CREATE MATERIALIZED VIEW view100
   AS (SELECT C.ID, C.Surname, sum(P.UnitPrice) as revenue, C.CompanyName, SO.OrderDate
         FROM Customers C, SalesOrders SO, SalesOrderItems SOI, Products P
         WHERE C.ID = SO.CustomerID
         AND SO.ID = SOI.ID
         AND P.ID = SOI.ProductID
         GROUP BY C.ID, C.Surname, C.CompanyName, SO.OrderDate);
REFRESH MATERIALIZED VIEW view100;

执行以下语句可返回刚才创建的视图的状态信息以及是否符合条件的信息:

SELECT ViewName, Status, ViewLastRefreshed, AvailForOptimization, RefreshType, CanBeImmediate 
FROM sa_materialized_view_info() AS V, 
   LATERAL( SELECT LIST( ErrorMessage ) 
            FROM sa_materialized_view_can_be_immediate( V.ViewName, V.OwnerName ) ) AS I( CanBeImmediate );
View-Name Status ViewLast-Refreshed AvailFor-Optimization RefreshType CanBeImmediate
view0 E (NULL) N I
view00 E (NULL) N M
view1 D (NULL) N M 不能使用视图 'view1',因为它已经被禁用
view100 E 2008-02-12 16:47:00.000 Y M 实例化视图 view10 已经初始化,所以不能转变为快速视图。实例化视图 view10 在不可为空的列上没有唯一索引,所以不能转变为快速视图。COUNT(*) 需要作为选择列表的一部分,所以实例化视图不能转变为快速视图。实例化视图在非集合不可为空的列上没有唯一索引,所以不能转变为快速视图。

从结果中可以看出:

  • view0 从未经过刷新且为快速视图。

  • view00 从未经过刷新且为手动视图。

  • view1 被禁用

  • view100 为手动视图,上次刷新时间为 2008-02-12 16:47:00.000。

  • 因为 CanBeImmediate 列中没有错误消息,所以 view00 可以转变为快速视图。

  • 由于 CanBeImmediate 列中列出的原因,view1 和 view100 不能变为快速视图。