楼主: newkid

[精华] [翻译]Oracle中的增强子查询优化

[复制链接]
论坛徽章:
0
51#
发表于 2011-5-4 11:06 | 只看该作者

学习了

谢谢

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:虎
日期:2009-01-07 17:29:302010广州亚运会纪念徽章:卡巴迪
日期:2011-04-17 16:39:06灰彻蛋
日期:2011-06-18 13:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51复活蛋
日期:2011-12-27 17:46:382012新春纪念徽章
日期:2012-01-04 11:54:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19
52#
发表于 2011-5-4 16:21 | 只看该作者
mark 有机会再好好研究;
thanks

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
53#
发表于 2011-5-12 19:12 | 只看该作者
newkid帮我优化的tpch q20在哪里呢

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
54#
发表于 2011-5-12 19:15 | 只看该作者
找到了

/*修改前的第20个查询语句*/
select s_name,  s_address
from supplier, nation
where s_suppkey in (select ps_suppkey
from partsupp
where ps_partkey in (select p_partkey
from part
where p_name like 'forest%')
and ps_availqty > (select 0.5 * sum(l_quantity)
from lineitem
where l_partkey = ps_partkey
and l_suppkey = ps_suppkey
and l_shipdate >= date '1994-01-01'
and l_shipdate < date '1994-01-01' + interval '1' year))
and s_nationkey = n_nationkey
and n_name = 'CANADA'
order by s_name
limit 100;

/*修改后的第20个查询语句*/
select s_name,  s_address
from supplier, nation
where s_suppkey in (select ps_suppkey
                      from partsupp
                         ,(select l_partkey,l_suppkey, sum(l_quantity) l_quantity_SUM
                            from lineitem,part
                            where l_partkey = p_partkey and p_name like 'forest%'
                                   and l_shipdate >= date '1994-01-01'
                                   and l_shipdate < date '1994-01-01' + interval '1' year
                           GROUP BY l_partkey,l_suppkey
                           )
                     where l_partkey = ps_partkey
                           and l_suppkey = ps_suppkey
                           and ps_availqty > 0.5*l_quantity_SUM
                    )
      and s_nationkey = n_nationkey
      and n_name = 'CANADA'
order by s_name
limit 100;

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
55#
发表于 2011-5-12 19:28 | 只看该作者
db2的优化器还是很认sql的
前面那个
---------------------------------------------
* Comment: " Q20"

---------------------------------------------

* SQL Statement Number 20:

select
        s_name,
        s_address
from
        tpch.supplier,
        tpch.nation
where
        s_suppkey in (
                select
                        ps_suppkey
                from
                        tpch.partsupp
                where
                        ps_partkey in (
                                select
                                        p_partkey
                                from
                                        tpch.part
                                where
                                        p_name like 'bisque%'
                        )
                        and ps_availqty > (
                                select
                                        0.5 * sum(l_quantity)
                                from
                                        tpch.lineitem
                                where
                                        l_partkey = ps_partkey
                                        and l_suppkey = ps_suppkey
                                        and l_shipdate >= date '1994-01-01'
                                        and l_shipdate < date '1994-01-01' + 1 year
                        )
        )
        and s_nationkey = n_nationkey
        and n_name = 'CANADA'
order by
        s_name
fetch first 10 rows only;

S_NAME                    S_ADDRESS                              
------------------------- ----------------------------------------
Supplier#000000020        iybAE,RmTymrZVYaFZva2SH,j               
Supplier#000000091        YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3   
Supplier#000000205        rF uV8d0JNEk                           
Supplier#000000285        Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf           
Supplier#000000287        7a9SP7qW5Yku5PvSg                       
Supplier#000000354        w8fOo5W,aS                              
Supplier#000000361        f8IUYRmdVXhQC9qJQjWknCXmzhe38vCbk6      
Supplier#000000475        xw4V6,4QQW LI5Qg EOKy4JD B4Cq1tjzaOma9Y
Supplier#000000530        0qwCMwobKY OcmLyfRXlagA8ukENJv,         
Supplier#000000532        ep92hT7VLaVlDKM7lgbj02kIL               

* 10 row(s) fetched, 10 row(s) output.

* Elapsed Time is:     587.439039 seconds

改了后

-sh-3.2$ date; time db2 -tvf /user1/ibm/q20newkid.sql ;date
2011年 05月 12日 星期四 19:19:05 CST
select s_name,  s_address from supplier, nation where s_suppkey in (select ps_suppkey from partsupp ,(select l_partkey,l_suppkey, sum(l_quantity) l_quantity_SUM from lineitem,part where l_partkey = p_partkey and p_name like 'bisque%' and l_shipdate >= date '1994-01-01' and l_shipdate < date '1994-01-01' + 1 year GROUP BY l_partkey,l_suppkey ) where l_partkey = ps_partkey and l_suppkey = ps_suppkey and ps_availqty > 0.5*l_quantity_SUM ) and s_nationkey = n_nationkey and n_name = 'CANADA' order by s_name fetch first 10 rows only

S_NAME                    S_ADDRESS                              
------------------------- ----------------------------------------
Supplier#000000020        iybAE,RmTymrZVYaFZva2SH,j               
Supplier#000000091        YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3   
Supplier#000000205        rF uV8d0JNEk                           
Supplier#000000285        Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf           
Supplier#000000287        7a9SP7qW5Yku5PvSg                       
Supplier#000000354        w8fOo5W,aS                              
Supplier#000000361        f8IUYRmdVXhQC9qJQjWknCXmzhe38vCbk6      
Supplier#000000475        xw4V6,4QQW LI5Qg EOKy4JD B4Cq1tjzaOma9Y
Supplier#000000530        0qwCMwobKY OcmLyfRXlagA8ukENJv,         
Supplier#000000532        ep92hT7VLaVlDKM7lgbj02kIL               

  10 record(s) selected.



real    0m25.700s
user    0m0.013s
sys     0m0.011s
2011年 05月 12日 星期四 19:19:31 CST

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
56#
 楼主| 发表于 2011-5-12 21:54 | 只看该作者
TPC测试不允许修改源代码对吧?所以只好在优化器下功夫了。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:282013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042011新春纪念徽章
日期:2011-01-04 10:35:172010广州亚运会纪念徽章:马术
日期:2010-11-22 15:29:06ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010系统架构师大会纪念
日期:2010-09-03 16:39:572010年世界杯参赛球队:希腊
日期:2010-06-22 12:15:492010数据库技术大会纪念徽章
日期:2010-05-13 09:34:232010新春纪念徽章
日期:2010-03-01 11:06:13
57#
发表于 2011-5-12 22:26 | 只看该作者
顶一下

使用道具 举报

回复
论坛徽章:
2
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00蜘蛛蛋
日期:2012-11-03 20:51:31
58#
发表于 2012-5-18 10:17 | 只看该作者
在国际三大数据库会议(之一,VLDB)期刊上面发表的,灰常珍贵!

使用道具 举报

回复
论坛徽章:
23
2013年新春福章
日期:2013-02-25 14:51:242013年新春福章
日期:2013-03-03 16:41:142013年新春福章
日期:2013-03-03 16:42:172013年新春福章
日期:2013-02-25 11:02:122013年新春福章
日期:2013-03-03 16:41:142013年新春福章
日期:2013-03-03 16:42:172014年世界杯参赛球队: 法国
日期:2014-06-13 11:24:502014年世界杯参赛球队: 波黑
日期:2014-06-13 15:38:252014年世界杯参赛球队: 伊朗
日期:2014-07-28 20:08:212014年世界杯参赛球队: 俄罗斯
日期:2014-07-17 17:21:42
59#
发表于 2012-6-5 13:44 | 只看该作者
好东西,收藏了仔细研究……

使用道具 举报

回复
论坛徽章:
9
2009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:19:10ITPUB9周年纪念徽章
日期:2010-10-08 09:31:22ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24
60#
发表于 2012-10-15 09:23 | 只看该作者
很好的文章,翻译得也好,感谢lz的努力。
有一个很小的问题:
6.2节中:
”在新建的访问结构中(x, 2, 3), (x, 2, null), (x, null, 3),和(x, null, null)。“这句话不通,应该加上搜索两个字,
改成这样”在新建的访问结构中搜索 (x, 2, 3), (x, 2, null), (x, null, 3),和(x, null, null)“。

另外有两个地方没看懂:
1、2.3节中, Q5 为什么能展开成Q6,感觉Q6是一个很奇怪的查询。
2、6.2节中,第3点为什么要建立第二个hash 表?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表