为什么后边的语句少一层子查询,但是执行计划相同?physical reads统计信息还比前边的差

[复制链接]
查看11 | 回复3 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
为什么后边的语句少一层子查询,但是执行计划相同?physical reads统计信息还比前边的差?
请教更好的写法?又是行列转换,我不太会用分析函数.争取这帖以后不再问
select substr(industry_name,1,20) 行业名称, c.*
from(
select 行业代码,sum(a1),sum(a2),sum(a3),sum(b1),sum(b2),sum(b3),sum(c1),sum(c2),sum(c3) from
(
select 行业代码,
decode(注册类型码,'1',营业利润率,null) A1,
decode(注册类型码,'2',营业利润率,null) A2,
decode(注册类型码,'3',营业利润率,null) A3,
decode(注册类型码,'1',主营业务利润率,null) B1,
decode(注册类型码,'2',主营业务利润率,null) B2,
decode(注册类型码,'3',主营业务利润率,null) B3,
decode(注册类型码,'1',营业成本比率,null) C1,
decode(注册类型码,'2',营业成本比率,null) C2,
decode(注册类型码,'3',营业成本比率,null) C3
from(
select
substr(z01_064,1,2) 行业代码,substr(z01_08,1,1) 注册类型码,
round(sum(b04_45)/sum(b04_29)*100,2) 营业利润率,
round(sum(b04_29-b04_30-b04_31)/sum(b04_29)*100,2) 主营业务利润率,
round(sum(b04_34+b04_35+b04_43)/sum(b04_29)*100,2) 营业成本比率
from cj601 a,cj604 b where a.uuid=b.uuid
group by substr(z01_064,1,2),substr(z01_08,1,1)
))group by 行业代码
)c,industry
where industry_code=行业代码;
已选择39行。
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 NESTED LOOPS
21 VIEW
32 SORT (GROUP BY)
43 VIEW
54 SORT (GROUP BY)
65
NESTED LOOPS
76
TABLE ACCESS (FULL) OF 'CJ604'
86
TABLE ACCESS (BY INDEX ROWID) OF 'CJ601'
98
INDEX (UNIQUE SCAN) OF 'CJ601_UI' (UNIQUE)
101 TABLE ACCESS (BY INDEX ROWID) OF 'INDUSTRY'
11 10 INDEX (UNIQUE SCAN) OF 'SYS_C002819' (UNIQUE)


Statistics
----------------------------------------------------------

0recursive calls

0db block gets
168251consistent gets
3192physical reads

0redo size
3491bytes sent via SQL*Net to client
525bytes received via SQL*Net from client

4SQL*Net roundtrips to/from client

2sorts (memory)

0sorts (disk)
39rows processed
-- 2----
select substr(industry_name,1,20) 行业名称, c.*
from(
select 行业代码,
sum(decode(注册类型码,'1',营业利润率,null)) A1,
sum(decode(注册类型码,'2',营业利润率,null)) A2,
sum(decode(注册类型码,'3',营业利润率,null)) A3,
sum(decode(注册类型码,'1',主营业务利润率,null)) B1,
sum(decode(注册类型码,'2',主营业务利润率,null)) B2,
sum(decode(注册类型码,'3',主营业务利润率,null)) B3,
sum(decode(注册类型码,'1',营业成本比率,null)) C1,
sum(decode(注册类型码,'2',营业成本比率,null)) C2,
sum(decode(注册类型码,'3',营业成本比率,null)) C3
from(
select
substr(z01_064,1,2) 行业代码,substr(z01_08,1,1) 注册类型码,
round(sum(b04_45)/sum(b04_29)*100,2) 营业利润率,
round(sum(b04_29-b04_30-b04_31)/sum(b04_29)*100,2) 主营业务利润率,
round(sum(b04_34+b04_35+b04_43)/sum(b04_29)*100,2) 营业成本比率
from cj601 a,cj604 b where a.uuid=b.uuid
group by substr(z01_064,1,2),substr(z01_08,1,1)
)group by 行业代码
)c,industry
where industry_code=行业代码;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 NESTED LOOPS
21 VIEW
32 SORT (GROUP BY)
43 VIEW
54 SORT (GROUP BY)
65
NESTED LOOPS
76
TABLE ACCESS (FULL) OF 'CJ604'
86
TABLE ACCESS (BY INDEX ROWID) OF 'CJ601'
98
INDEX (UNIQUE SCAN) OF 'CJ601_UI' (UNIQUE)
101 TABLE ACCESS (BY INDEX ROWID) OF 'INDUSTRY'
11 10 INDEX (UNIQUE SCAN) OF 'SYS_C002819' (UNIQUE)


Statistics
----------------------------------------------------------

0recursive calls

0db block gets
168251consistent gets
3294physical reads

0redo size
3446bytes sent via SQL*Net to client
525bytes received via SQL*Net from client

4SQL*Net roundtrips to/from client

2sorts (memory)

0sorts (disk)
39rows processed
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
select substr(industry_name,1,20) 行业名称,行业代码, A1,A2,A3,B1,B2,B3,C1,C2,C3
from(
select * from(
select 行业代码,
lead(营业利润率,0) over(partition by 行业代码 order by 注册类型码) A1,
lead(营业利润率,1) over(partition by 行业代码 order by 注册类型码) A2,
lead(营业利润率,2) over(partition by 行业代码 order by 注册类型码) A3,
lead(主营业务利润率,0) over(partition by 行业代码 order by 注册类型码) B1,
lead(主营业务利润率,1) over(partition by 行业代码 order by 注册类型码) B2,
lead(主营业务利润率,2) over(partition by 行业代码 order by 注册类型码) B3,
lead(营业成本比率,0) over(partition by 行业代码 order by 注册类型码) C1,
lead(营业成本比率,1) over(partition by 行业代码 order by 注册类型码) C2,
lead(营业成本比率,2) over(partition by 行业代码 order by 注册类型码) C3,
row_number( ) over(partition by 行业代码 order by 注册类型码) rn
from(
select
substr(z01_064,1,2) 行业代码,substr(z01_08,1,1) 注册类型码,
round(sum(b04_45)/sum(b04_29)*100,2) 营业利润率,
round(sum(b04_29-b04_30-b04_31)/sum(b04_29)*100,2) 主营业务利润率,
round(sum(b04_34+b04_35+b04_43)/sum(b04_29)*100,2) 营业成本比率
from cj601 a,cj604 b where a.uuid=b.uuid
group by substr(z01_064,1,2),substr(z01_08,1,1)
))where rn=1
)c,industry
where industry_code=行业代码;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 NESTED LOOPS
21 VIEW
32 WINDOW (BUFFER)
43 SORT (GROUP BY)
54 NESTED LOOPS
65
TABLE ACCESS (FULL) OF 'CJ604'
75
TABLE ACCESS (BY INDEX ROWID) OF 'CJ601'
87
INDEX (UNIQUE SCAN) OF 'CJ601_UI' (UNIQUE)
91 TABLE ACCESS (BY INDEX ROWID) OF 'INDUSTRY'
109 INDEX (UNIQUE SCAN) OF 'SYS_C002819' (UNIQUE)


Statistics
----------------------------------------------------------

0recursive calls

0db block gets
168251consistent gets
3474physical reads

0redo size
3446bytes sent via SQL*Net to client
525bytes received via SQL*Net from client

4SQL*Net roundtrips to/from client

2sorts (memory)

0sorts (disk)
39rows processed
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
执行计划从SORT (GROUP BY)
变成了 WINDOW (BUFFER)
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
谢谢,LZ辛苦了.
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行