这个sql该如何优化?
时间:2011-08-24
来源:互联网
CREATE TABLE tmp10(pk_f1 VARCHAR(10),pk_f2 VARCHAR(10),
pk_f3 VARCHAR(10),f1 VARCHAR(10),
f2 VARCHAR(10),f3 VARCHAR(10),
f4 VARCHAR(10),f5 VARCHAR(10),
YEAR VARCHAR(10),
startdt VARCHAR(10),
enddt VARCHAR(10));
CREATE TABLE tmp11(pk_f1 VARCHAR(10),pk_f2 VARCHAR(10),
pk_f3 VARCHAR(10),
t1 VARCHAR(10),
f1 VARCHAR(10),
f2 VARCHAR(10),f3 VARCHAR(10),
f4 VARCHAR(10),f5 VARCHAR(10),
count1 INT,
count2 INT,
YEAR VARCHAR(10),
startdt VARCHAR(10),
enddt VARCHAR(10));
SELECT tmp10.pk_f1,
tmp10.pk_f2,
tmp10.pk_f3,
tmp10.f1,
tmp10.f2,
tmp10.f3,
tmp10.f4,
tmp10.f5,
tmp10.YEAR,
tmp10.STARTDT,
tmp10.ENDDT,
nvl((SELECT SUM(count1)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.STARTDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) INIT_D,
nvl((SELECT SUM(count2)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.STARTDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) INIT_C,
nvl((SELECT SUM(count1)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.endDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) END_D,
nvl((SELECT SUM(count2)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.endDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) END_C
FROM tmp10
WHERE TMP10.STARTDT <> TMP10.ENDDT AND tmp10.year<>'0002'
ORDER BY 1,2,3,4,5,6,7,8,9,10
tmp10数据量约400W行,tmp11数据量约800多W行,正常情况下执行查询结果插入新表应该有多长时间啊,为什么上述执行一晚上数据都没装载完。
[ 本帖最后由 zhangqi0718 于 2011-8-24 12:11 编辑 ]
pk_f3 VARCHAR(10),f1 VARCHAR(10),
f2 VARCHAR(10),f3 VARCHAR(10),
f4 VARCHAR(10),f5 VARCHAR(10),
YEAR VARCHAR(10),
startdt VARCHAR(10),
enddt VARCHAR(10));
CREATE TABLE tmp11(pk_f1 VARCHAR(10),pk_f2 VARCHAR(10),
pk_f3 VARCHAR(10),
t1 VARCHAR(10),
f1 VARCHAR(10),
f2 VARCHAR(10),f3 VARCHAR(10),
f4 VARCHAR(10),f5 VARCHAR(10),
count1 INT,
count2 INT,
YEAR VARCHAR(10),
startdt VARCHAR(10),
enddt VARCHAR(10));
SELECT tmp10.pk_f1,
tmp10.pk_f2,
tmp10.pk_f3,
tmp10.f1,
tmp10.f2,
tmp10.f3,
tmp10.f4,
tmp10.f5,
tmp10.YEAR,
tmp10.STARTDT,
tmp10.ENDDT,
nvl((SELECT SUM(count1)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.STARTDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) INIT_D,
nvl((SELECT SUM(count2)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.STARTDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) INIT_C,
nvl((SELECT SUM(count1)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.endDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) END_D,
nvl((SELECT SUM(count2)
FROM tmp11
WHERE tmp10.pk_f1 = tmp11.pk_f1
AND tmp10.pk_f2 = tmp11.pk_f2
AND tmp10.pk_f3 = tmp11.pk_f3
AND tmp10.endDT > tmp11.t1
AND SUBSTR(tmp10.STARTDT, 0, 4) =
SUBSTR(tmp11.t1, 0, 4)
AND nvl(tmp10.f1,9999)=nvl(tmp11.f1,9999)
AND nvl(tmp10.f2,9999)=nvl(tmp11.f2,9999)
AND nvl(tmp10.f3,9999)=nvl(tmp11.f3,9999)
AND nvl(tmp10.f4,9999)=nvl(tmp11.f4,9999)
AND nvl(tmp10.f5,9999)=nvl(tmp11.f5,9999)),0) END_C
FROM tmp10
WHERE TMP10.STARTDT <> TMP10.ENDDT AND tmp10.year<>'0002'
ORDER BY 1,2,3,4,5,6,7,8,9,10
tmp10数据量约400W行,tmp11数据量约800多W行,正常情况下执行查询结果插入新表应该有多长时间啊,为什么上述执行一晚上数据都没装载完。
[ 本帖最后由 zhangqi0718 于 2011-8-24 12:11 编辑 ]
作者: zhangqi0718 发布时间: 2011-08-24

作者: 酷酷小山贼 发布时间: 2011-08-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28