sql 优化

[复制链接]
查看11 | 回复4 | 2015-7-24 13:55:37 | 显示全部楼层 |阅读模式
SELECT '201509',
'01',

'010',

A.USER_ID,

B.DEVICE_NUMBER,

B.IMEI,

SUM(B.MON_VOICE_INTROAM_NUM),

SUM(B.MON_FLUX_INTROAM_NUM),

SUM(B.MON_VOICE_CDR_NUMS),

SUM(B.MON_FLUX_CDR_NUMS),

'1'

FROM

(SELECT USER_ID FROM DWA_S_D_PRD_MB_USE_GROUP_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01') A

JOIN

(SELECT USER_ID,

DEVICE_NUMBER,

IMEI,

SUM(MON_VOICE_INTROAM_NUM),

SUM(MON_FLUX_INTROAM_NUM),

SUM(MON_VOICE_CDR_NUMS),

SUM(MON_FLUX_CDR_NUMS)

FROM

(SELECT USER_ID,

DEVICE_NUMBER,

IMEI,

MON_INTROAM_NUM MON_VOICE_INTROAM_NUM,

NULL MON_FLUX_INTROAM_NUM,

MON_CDR_NUMS MON_VOICE_CDR_NUMS,

NULL MON_FLUX_CDR_NUMS

FROM DWA_V_D_CUS_2G_IMEI_VOICE_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01'

UNION ALL

SELECT USER_ID,

DEVICE_NUMBER,

IMEI,

NULL MON_VOICE_INTROAM_NUM,

MON_FLUX_INTROAM_NUM MON_FLUX_INTROAM_NUM,

NULL MON_VOICE_CDR_NUMS,

MON_CDR_NUMS MON_FLUX_CDR_NUMS

FROM DWA_V_D_CUS_2G_IMEI_FLUX_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01'

UNION ALL

SELECT USER_ID,

DEVICE_NUMBER,

IMEI,

MON_INTROAM_NUM MON_VOICE_INTROAM_NUM,

NULL MON_FLUX_INTROAM_NUM,

MON_CDR_NUMS MON_VOICE_CDR_NUMS,

NULL MON_FLUX_CDR_NUMS

FROM DWA_V_D_CUS_3G_IMEI_VOICE_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01'

UNION ALL

SELECT USER_ID,

DEVICE_NUMBER,

IMEI,

NULL MON_VOICE_INTROAM_NUM,

MON_FLUX_INTROAM_NUM MON_FLUX_INTROAM_NUM,

NULL MON_VOICE_CDR_NUMS,

MON_CDR_NUMS MON_FLUX_CDR_NUMS

FROM DWA_V_D_CUS_3G_IMEI_FLUX_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01') T

GROUP BY USER_ID,

DEVICE_NUMBER,

IMEI) B

ON A.USER_ID = B.USER_ID

GROUP BY A.USER_ID,

B.DEVICE_NUMBER,

B.IMEI
file:///C:\Users\crying\AppData\Roaming\Tencent\Users\850490579\QQ\WinTemp\RichOle\2EB`_R7DM(2Z43SB09FNPY1.png

2EB`_R7DM(2Z43SB09FNPY1.png (31.91 KB, 下载次数: 0)
下载附件
2015-10-22 11:30 上传


select count(1) FROM DWA_V_D_CUS_2G_IMEI_VOICE_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01'--200w


select count(1)FROM DWA_V_D_CUS_2G_IMEI_FLUX_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01' --523712

select count(1) FROM DWA_V_D_CUS_3G_IMEI_VOICE_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01'--8342524


select count(1) FROM DWA_V_D_CUS_3G_IMEI_FLUX_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01' --699803


file:///C:\Users\crying\AppData\Roaming\Tencent\Users\850490579\QQ\WinTemp\RichOle\2EB`_R7DM(2Z43SB09FNPY1.png


回复

使用道具 举报

千问 | 2015-7-24 13:55:37 | 显示全部楼层
提供真实的执行计划,而不是这个PL/sql DEVELOPER提供的。
回复

使用道具 举报

千问 | 2015-7-24 13:55:37 | 显示全部楼层
统计信息似乎不对吧。
回复

使用道具 举报

千问 | 2015-7-24 13:55:37 | 显示全部楼层
1.4个表分别group by sum之后,再union all,然后再group by sum一次
2.(SELECT USER_ID FROM DWA_S_D_PRD_MB_USE_GROUP_010

WHERE PART_ID = '1'

AND MONTH_ID = '201509'

AND DAY_ID = '01') A
A子查询里边是否user_id不唯一,否则不应该AB关联之后再group by,但是如果user_id不唯一,你再 group by sum也不对,值翻倍了,我想应该是A内对user_id取distinct,然后再AB关联
回复

使用道具 举报

千问 | 2015-7-24 13:55:37 | 显示全部楼层
本帖最后由 bid01 于 2015-10-27 09:12 编辑
udfrog 发表于 2015-10-26 18:59
1.4个表分别group by sum之后,再union all,然后再group by sum一次
2.(SELECT USER_ID FROM DWA_S_D_PRD ...

我吧外层sum去掉执行计划 最外层少了个hash group by
C:\Users\crying\Desktop\工作\0DIX@{X@JQOELNUL9ZWJ0)I.png
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行