|
1、优化SQL语句,需要SQL语句,执行计划,关键是数据环境,也就是该SQL相关表的数据量,条件列的选择性和数据分布,相关表上的索引情况,甚至表的结构等,楼主别说我毛病多,没办法,优化就是这么繁琐,需要了解很多细节信息,所以,优化有时需要连接到具体数据环境,做不到,那么就只能一点点反馈,效率比较低;
2、怀疑楼主给出的视图定义和执行计划不对应,因为执行计划里只出现了一个大数据量表G3_Z_JKS,而G3_ZS_YJSF没见着;
3、因为很多信息不掌握,我只能给出建议,不保证正确和一定解决问题,楼主可以试试,首先,消除计划中的NL,再就是,注意有没有更高效的索引。
SELECT /*+ use_hash(VW_G3_ZS_JKS.G3_DM_GY_GK) */ VW_G3_ZS_JKS.SHXYDM_NSRSBH SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC NSRMC,
sum(VW_G3_ZS_JKS.SJJE) SJJE,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC ZGSWSKFJ_DM_MC
FROM VW_G3_ZS_JKS
WHERE 0 = 0
AND (VW_G3_ZS_JKS.SJJE >= 1000 AND
VW_G3_ZS_JKS.SKGK_DM_MC like '%销售%' AND
VW_G3_ZS_JKS.RKRQ >= date
'2017-01-01' AND VW_G3_ZS_JKS.RKRQ < date
'2017-12-31' + 1 AND VW_G3_ZS_JKS.NSRZTMC = '正常' AND
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC in
('单位名称1',
'单位名称2',
'单位名称3',
'单位名称4',
'单位名称5',
'单位名称6',
'单位名称7',
'单位名称8',
'单位名称9',
'单位名称10',
'单位名称11'))
group by VW_G3_ZS_JKS.SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC;
或
SELECT /*+ use_hash(VW_G3_ZS_JKS.G3_ZS_JKS) */ VW_G3_ZS_JKS.SHXYDM_NSRSBH SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC NSRMC,
sum(VW_G3_ZS_JKS.SJJE) SJJE,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC ZGSWSKFJ_DM_MC
FROM VW_G3_ZS_JKS
WHERE 0 = 0
AND (VW_G3_ZS_JKS.SJJE >= 1000 AND
VW_G3_ZS_JKS.SKGK_DM_MC like '%销售%' AND
VW_G3_ZS_JKS.RKRQ >= date
'2017-01-01' AND VW_G3_ZS_JKS.RKRQ < date
'2017-12-31' + 1 AND VW_G3_ZS_JKS.NSRZTMC = '正常' AND
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC in
('单位名称1',
'单位名称2',
'单位名称3',
'单位名称4',
'单位名称5',
'单位名称6',
'单位名称7',
'单位名称8',
'单位名称9',
'单位名称10',
'单位名称11'))
group by VW_G3_ZS_JKS.SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC;
或
SELECT /*+ use_hash(VW_G3_ZS_JKS.G3_DM_GY_GK,VW_G3_ZS_JKS.G3_ZS_JKS) */ VW_G3_ZS_JKS.SHXYDM_NSRSBH SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC NSRMC,
sum(VW_G3_ZS_JKS.SJJE) SJJE,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC ZGSWSKFJ_DM_MC
FROM VW_G3_ZS_JKS
WHERE 0 = 0
AND (VW_G3_ZS_JKS.SJJE >= 1000 AND
VW_G3_ZS_JKS.SKGK_DM_MC like '%销售%' AND
VW_G3_ZS_JKS.RKRQ >= date
'2017-01-01' AND VW_G3_ZS_JKS.RKRQ < date
'2017-12-31' + 1 AND VW_G3_ZS_JKS.NSRZTMC = '正常' AND
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC in
('单位名称1',
'单位名称2',
'单位名称3',
'单位名称4',
'单位名称5',
'单位名称6',
'单位名称7',
'单位名称8',
'单位名称9',
'单位名称10',
'单位名称11'))
group by VW_G3_ZS_JKS.SHXYDM_NSRSBH,
VW_G3_ZS_JKS.TAX_PAYER_CODE,
VW_G3_ZS_JKS.NSRMC,
VW_G3_ZS_JKS.ZGSWSKFJ_DM_MC;
总之,照着以上思路多试试吧。
|
|