欢迎来到天天文库
浏览记录
ID:38634668
大小:36.00 KB
页数:8页
时间:2019-06-16
《解析:通过创建物化视图来提高查询速度》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、解析:通过创建物化视图来提高查询速度也许,你现在正在为等待你的查询返回结果而感到身心憔悴?有可能你已经为增强索引和调优SQL而感到疲惫不堪,但仍然不能提高查询性能?那么,你是否已经考虑创建物化视图?有了物化视图,那些过去需要数小时运行的报告可以在几分钟内完成。物化视图可以包括联接(join)和集合(aggregate),它提供了一种储存预计算结果的方法。在执行一个查询时,优化器会判定访问物化视图或数据驻留的基础表是否更快一些。如果优化器判定查询物化视图是更好的解决方案,那么优化器会在一个被称为“查询改写”(queryrewri
2、te)的过程中改写SQL查询。在这个过程中,不需要对任何SQL或应用程序代码进行修改,所以任何利用SQL访问数据库的应用程序或特定查询工具都可得益于使用物化视图。当为计算结果而需要访问的数据数量远大于结果(如集合)的大小时,最适合使用查询改写,但是它也可被用于加速昂贵的联接或规划。本文首先介绍了优化器可以执行的查询改写类型。然后,它讨论了帮助确定创建最佳物化视图集的工具,使优化器能够改写多个查询。利用这些工具创建的物化视图在其基础数据发生变化时还可以快速刷新。如果你不知道创建一个物化视图、一个索引或同时创建两者哪种更好,那么在
3、Oracle数据库10g中引入的SQLAccessAdvisor可以通过分析给定的工作负荷帮助你做出决定。[b]查询改写类型[/b]可能有许多类型的查询改写;当物化视图的定义查询与查询的文本完全匹配时,就发生最简单和最显著类型的查询改写。但是,当相同物化视图可用于相应多个查询时,就可以实现查询改写的最大好处。现在,我们将举例说明一些Oracle优化器使用的规则,以确定它是否将使用物化视图来响应。对于本文中的示例,可以考虑将一个星形模式中的PURCHASES表看作事实表(facttable),其范围由time_key划分。维度表
4、(dimensiontable)--TIME、PRODUCT和CUSTOMERS--包含主键time_key、product_id和cust_id。在PURCHASES表中有引用各个维度表的外键约束。考虑一下清单1中所创建的物化视图,该视图按月按product_id计算销售总额和销售总次数。注意:对于用于查询改写的物化视图,必须有ENABLEQUERYREWRITE子句。还有,初始化参数QUERY_REWRITE_ENABLED必须被设置为TRUE。代码清单1:创建月销售物化视图 CREATEMATERIALIZEDVIEW
5、monthly_sales_mv ENABLEQUERYREWRITE AS SELECTt.month,p.product_id,SUM(ps.purchase_price)assum_of_sales, COUNT(ps.purchase_price)astotal_sales FROMtimet,productp,purchasesps WHEREt.time_key=ps.time_keyAND ps.product_id=p.product_id GROUPBYt.month,p.prod
6、uct_id;[b]集合计算[/b]在本文的示例中,我们将说明物化视图的查询并显示由EXPLAINPLAN得到的执行计划。清单2中的查询要求按月和按产品的平均采购价格。优化器可以使用物化视图monthly_sales_mv,利用SUM和COUNT集合计算平均采购价格。这个示例说明了一种叫做“集合计算”的技术。代码清单2:获得平均(AVG)采购价格 SELECTt.month,p.product_id,AVG(ps.purchase_price)asavg_sales FROMtimet,productp,purchas
7、esps WHEREt.time_key=ps.time_keyAND ps.product_id=p.product_id GROUPBYt.month,p.product_id; Id Operation Name ________________________________________________ SELECTSTATEMENT MAT_VIEWREWRITEACCESSFULL MONTHLY_SALES_MV[b]Joinback[/b]Joinba
8、ck技术非常有用,因为它允许当物化视图中没有列时进行查询改写。清单3中的查询要求按月和按产品类别的销售总额,而该物化视图中并没有product.category列。然而,产品表的主键product_id列则位于物化视图中。因此,优化器可以将物化视图与产品表联接起来以得到产品类
此文档下载收益归作者所有