一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

SQL Anywhere 11 (Panorama) 评审指南 Part III_Mssql系列教程

时间:2008-05-27 编辑:简简单单 来源:一聚教程网

例程可通过http://www.sybase.com/files/Technical_Documents/PanoramaRevGuide.zip下载
本文档中出现的SQL Anywhere 11在其它地方可能出现为SQL Anywhere Panorama。

即时维护物化视图

物化视图(MV)存储着数据库中基于基表查询出来的结果。它通常用来存储通过对基表的大量聚合查询产生的计算结果。MV之余其他数据库对象(例如视图和表)的主要优点主要在于它与优化器的交互上。物化视图存储了高耗能查询的结果,通过提前执行繁杂工作来提高性能。

在SQL Anywhere 10中,当视图的基表发生改变时,物化视图中的数据就不是最新数据了。需要通过手工定期执行刷新来更新物化视图的内容。另外,当MV被刷新后,MV的内容被删除并被新的查询结果集取代。

使用SQL Anywhere 11,可通过配置使物化视图自动保持最更新。这就是说当MV的基表发生改变时(Insert/Update/Delete),MV也被更新来反映这些变化。这就不需要MV删除或重新填充数据。

即时维护物化视图例程
本例演示了即时维护物化视图。此特性降低了开发人员在应用中使用物化视图的工作量,并且提高了优化器在优化过程中利用MV的能力。

1. 启动Interactive SQL并通过ODBC连接至SQL Anywhere 11 Demo数据库:开启命令行并运行以下命令:

dbisql -c "dsn=SQL Anywhere 11 Demo "

2. 在groupo用户下根据尺寸(size)和年(year)为每种已售产品的总数(数量和总价)创建物化视图,并声明该视图为手动刷新视图。执行下列SQL语句:

CREATE MATERIALIZED VIEW groupo.mv_manualrefresh AS
SELECT year( s.shipdate ) AS yr, p.name AS name, p.size AS size,
SUM( s.quantity ) AS total_quantity,
SUM( p.unitprice ) AS total_price,
COUNT( * ) AS num_records
FROM salesorderitems s, products p
WHERE p.id = s.productid
GROUP BY name, size, yr;

CREATE UNIQUE INDEX mvidx ON groupo.mv_manualrefresh( yr, name, size );

ALTER MATERIALIZED VIEW groupo.mv_manualrefresh MANUAL REFRESH;

3. 根据尺寸(size)和年(year)为每种已售产品的总数(数量和总价)创建另一个物化视图,但将该视图声明为可自动刷新(使用IMMEDIATE REFRESH关键字):

CREATE MATERIALIZED VIEW groupo.mv_autorefresh AS
SELECT year( s.shipdate ) AS yr, p.name AS name, p.size AS size,
SUM( s.quantity ) AS total_quantity,
SUM( p.unitprice ) AS total_price,
COUNT( * ) AS num_records
FROM salesorderitems s, products p
WHERE p.id = s.productid
GROUP BY name, size, yr;

CREATE UNIQUE INDEX mvidx ON groupo.mv_autorefresh( yr, name, size );

ALTER MATERIALIZED VIEW groupo.mv_autorefresh IMMEDIATE REFRESH;

4. 执行下列SQL语句,装载物化视图:

REFRESH MATERIALIZED VIEW groupo.mv_manualrefresh;

REFRESH MATERIALIZED VIEW groupo.mv_autorefresh;

5. 执行下列查询从视图中检索数据:

SELECT * FROM mv_manualrefresh ORDER BY name, size, yr;

<