当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 无需改变SQL查询就可以大幅提高查询性能。
 

 

 ·密码心理学    »显示摘要«
    摘要: 黑客破解不可避免要破解密码,本文不从破解技术入手,而从黑客技巧入手分析密码心理学。本文完全不涉及到具体的技术,完全是心理学、信息学内容。本来也懒得写,因为这是一个很大的内容,自己想到只是一点而已,我的见解简直是井底蛙看到的天空。不过几个月前心血来潮写了提纲,也就对着提纲详细写下来,没有再花太多心思思考,见谅。 密码心理学就是从用户的心理入手,分析对方心理,从而更快的破解出密码。掌握好可以快速破解......
 ·初识java内部类     »显示摘要«
    摘要: 初识java内部类 原创:morgan83 提起java内部类(inner class)可能很多人不太熟悉,实际上类似的概念在c++里也有,那就是嵌套类(nested class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,......


使用查询改写提高查询性能

无需改变sql查询就可以大幅提高查询性能.

在执行一个查询时,优化器会判定访问物化视图或数据驻留的基础表是否更快一些.如果优化器判定查询物化视图是更好的解决方案,那么优化器会在一个被称为“查询改写”(query rewrite)的过程中改写sql查询.在这个过程中,不需要对任何sql或应用程序代码进行修改,所以任何利用sql访问数据库的应用程序或特定查询工具都可得益于使用物化视图.当为计算结果而需要访问的数据数量远大于结果(如集合)的大小时,最适合使用查询改写,但是它也可被用于加速昂贵的联接或规划. 【程序编程相关:ResizableWindow源码

你是否为等待你的查询返回结果而感到疲惫?你是否已经为增强索引与调优sql而感到疲惫,但仍然不能提高查询性能?那么,你是否已经考虑创建物化视图?有了物化视图,那些过去需要数小时运行的报告可以在几分钟内完成.物化视图可以包括联接(join)与集合(aggregate),它提供了一种储存预计算结果的方法. 【推荐阅读:关于JSF和Struts的讨论1

查询改写类型 【扩展信息:WebService Behavior

本文首先介绍了优化器可以执行的查询改写类型.然后,它讨论了帮助确定创建最佳物化视图集的工具,使优化器能够改写多个查询.利用这些工具创建的物化视图在其基础数据发生变化时还可以快速刷新.如果你不知道创建一个物化视图.一个索引或同时创建两者哪种更好,那么在oracle数据库10g中引入的sql access advisor可以通过分析给定的工作负荷帮助你做出决定.

可能有许多类型的查询改写;当物化视图的定义查询与查询的文本完全匹配时,就发生最简单与最显著类型的查询改写.但是,当相同物化视图可用于相应多个查询时,就可以实现查询改写的最大好处.现在,我们将举例说明一些oracle优化器使用的规则,以确定它是否将使用物化视图来响应.

对于本文中的示例,可以考虑将一个星形模式中的purchases表看作事实表(fact table),其范围由time_key划分.维度表(dimension table)--time.product与customers--包含主键 time_key.product_id与cust_id.在purchases表中有引用各个维度表的外键约束.

考虑一下清单 1中所创建的物化视图,该视图按月按product_id计算销售总额与销售总次数.注意:对于用于查询改写的物化视图,必须有enable query rewrite子句.还有,初始化参数query_rewrite_enabled必须被设置为true.

代码清单 1:创建月销售物化视图

create materialized view monthly_sales_mv enable query rewrite as select t.month, p.product_id, sum(ps.purchase_price) as sum_of_sales, count (ps.purchase_price) as total_sales from time t, product p, purchases ps where t.time_key = ps.time_key and ps.product_id = p.product_id group by t.month, p.product_id;

集合计算

在本文的示例中,我们将说明物化视图的查询并显示由explain plan得到的执行计划.清单 2中的查询要求按月与按产品的平均采购价格.优化器可以使用物化视图monthly_sales_mv,利用sum与count集合计算平均采购价格.这个示例说明了一种叫做“集合计算”的技术.

代码清单 2:获得平均(avg)采购价格

select t.month, p.product_id, avg(ps.purchase_price) as avg_sales from time t, product p, purchases ps where t.time_key = ps.time_key and ps.product_id = p.product_id group by t.month, p.product_id; id operation name ________________________________________________ select statement mat_view rewrite access full monthly_sales_mv

joinback

joinback技术非常有用,因为它允许当物化视图中没有列时进行查询改写.清单 3中的查询要求按月与按产品类别的销售总额,而该物化视图中并没有product.category列.然而,产品表的主键product_id列则位于物化视图中.因此,优化器可以将物化视图与产品表联接起来以得到产品类别.

代码清单 3:通过joinback获得销售总额


...   下一页
 ·stream media html code    »显示摘要«
    摘要:<object classid="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95" id="mediaplayer1" width="500" height="145"> <param name="audiostream" value=&quo......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE