返回指定的实例化视图的信息。
sa_materialized_view_info( [ view_name [, owner_name ] ] )
view_name 使用此可选的 CHAR(128) 参数指定要为其返回信息的实现化视图 (Materialized View) 的名称。缺省值为 NULL。
owner_name 使用此可选的 CHAR(128) 参数指定实现化视图 (Materialized View) 的所有者。缺省值为 NULL。
列名 | 数据类型 | 说明 |
---|---|---|
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) |
视图的刷新类型。可能的值为:
|
如果 view_name 和 owner_name 均未指定或者均为 NULL,则返回数据库中所有实例化视图的相关信息。
如果 owner_name 未指定或为 NULL,则返回所有名为 view_name 的实例化视图的相关信息。
对于确定由于视图定义问题而优化程序永不考虑使用的实例化视图列表,此过程非常有用。对于这些实例化视图,AvailForOptimization 值为 I。
下表显示如何确定 AvailForOptimization 属性。从左列开始逐行读取,查看为了能够产生 AvailForOptimization 列中找到的值而必须满足的条件。
用户是否允许视图在优化中使用? | 视图定义是否满足使用所需的所有条件? | 连接选项是否与使用视图所需的选项相匹配? | 视图是否初始化? | AvailForOptimization 值 |
---|---|---|---|---|
是 | 是 | 是 | 是 | Y |
否 | 不适用 | 不适用 | 不适用 | D |
是 | 否 | 不适用 | 是 | I |
是 | 不适用 | 不适用 | 否 | N |
是 | 是 | 否 | 是 | O |
经过初始化的实例化视图可以为空。满足实例化视图定义的基础表中没有数据时会出现这种情况。空视图不视为与未初始化的实例化视图相同,虽然该视图中也没有数据。可以使用 ViewLastRefreshed 属性的值区分该视图是尚未初始化 (NULL),还是由于基础表中没有数据而为空(非 NULL)。
无
指定实例化视图的所有元数据和所有依赖性都将装载到数据库服务器高速缓存中。
下列语句返回有关数据库中所有实例化视图的信息:
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 ) WHERE OwnerName = USER_NAME(); |
ViewName | Status | ViewLastRefreshed | AvailForOptimization | RefreshType | CanBeImmediate |
---|---|---|---|---|---|
view0 | E | (NULL) | N | I | |
view00 | E | (NULL) | N | M | |
view1 | D | (NULL) | N | M | Cannot use view 'view1' because it has been disabled |
view100 | E | 2008-02-12 16:47:00.000 | Y | M | The materialized view view100 cannot be changed to immediate because it has already been initialized. The materialized view
view100 cannot be changed to immediate because it does not have a unique index on non-nullable columns. The materialized view
cannot be changed to immediate because COUNT(*) is required to be part of the SELECT list. The materialized view cannot be
changed to immediate because it does not have a unique index on non-aggregate non-nullable columns .
|
从结果中可以看出:
view0 从未经过刷新且为快速视图。
view00 从未经过刷新且为手动视图。
view1 被禁用
view100 为手动视图,上次刷新时间为 2008-02-12 16:47:00.000。
因为 CanBeImmediate 列中没有错误消息,所以 view00 可以转变为快速视图。
由于 CanBeImmediate 列中列出的原因,view1 和 view100 不能变为快速视图。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |