返回指定的实例化视图的信息。
sa_materialized_view_info( [ view_name [, owner_name ] ] )
view_name 使用此可选的 CHAR(128) 参数指定要为其返回信息的实现化视图 (Materialized View) 的名称。
owner_name 使用此可选的 CHAR(128) 参数指定实现化视图 (Materialized View) 的所有者。
如果 view_name 和 owner_name 都未指定,则返回有关数据库中所有实例化视图的信息。
如果 owner_name 未指定,则返回所有名为 view_name 的实例化视图信息。
sa_materialized_view_info 系统过程返回实例化视图的以下信息:
列名 | 数据类型 | 说明 |
---|---|---|
OwnerName | CHAR(128) | 视图的所有者。 |
viewname | CHAR(128) | 视图的名称。 |
Status | CHAR(1) |
视图的状态信息。可能的值为:
|
DataStatus | CHAR(1) |
视图中数据的状态信息。可能的值为:
|
ViewLastRefreshed | TIMESTAMP |
上次刷新视图时的时间。如果 ViewLastRefreshed 值为 NULL,则视图尚未初始化。 |
DataLastModified | TIMESTAMP |
针对失效视图,上次修改基础数据的时间。 对于未初始化的视图,或认为未失效的视图,其值为 NULL。 |
AvailForOptimization | CHAR(1) |
有关视图供优化程序使用的可用性信息。可能的值为:
有关优化程序是否选择实例化视图以及如何选择的详细信息,请参见使用实例化视图提高性能。 |
RefreshType | CHAR(1) |
视图的刷新类型。可能的值为:
有关手工视图和快速视图的详细信息,请参见手动和快速实例化视图。 |
对于确定由于视图定义问题而优化程序永不考虑使用的实例化视图列表,此过程非常有用。对于这些实现化视图 (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 不能变为快速视图。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |