求下面SQL优化,表的连接太多了。

haoztao 2012-06-20 09:21:15


select a.id,
a.claimno ,
a.username ,
a.appealreason ,
a.appealstatus,
a.appealResult,
b.tasksuggestion ,
b.updater ,
(select tasksuggestion from claimTasks where tasktype='ZJPD' and taskid=a.claimno) ptasksuggestion
from
appealInfo a ,
claimTasks b
where
b.tasktype='SSPD' and a.claimno=b.taskid and
appealFlag='1' and 1=1
order by id desc

目前执行时间太长了3.563s 2000多条数据
...全文
213 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小德 2012-06-20
  • 打赏
  • 举报
回复
是查出来的数据只有2000多条吧,原表数据量大概多少?
写法看起来还OK,看看工作计划吧,可以建索引试试
haoztao 2012-06-20
  • 打赏
  • 举报
回复
多一个order by id desc很影响时效,如何办?
haoztao 2012-06-20
  • 打赏
  • 举报
回复
create index claimnosearch on claimTasks(taskid) 创建一个索引好了
yinan9 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
SQL code
SELECT A.ID,
A.CLAIMNO,
A.USERNAME,
A.APPEALREASON,
A.APPEALSTATUS,
A.APPEALRESULT,
B.TASKSUGGESTION,
B.UPDATER,
-- (select ……
[/Quote]对不起,没看清where后面的条件 B.TASKTYPE = 'SSPD'
原来的写法是没有多少问题的,逻辑比较简单。
一个建议是,表连接的时候,把数据量大的表放在前面,量小的表放之后。因为SQL运行时从后往前去读表的
yinan9 2012-06-20
  • 打赏
  • 举报
回复
SELECT A.ID,
A.CLAIMNO,
A.USERNAME,
A.APPEALREASON,
A.APPEALSTATUS,
A.APPEALRESULT,
B.TASKSUGGESTION,
B.UPDATER,
-- (select tasksuggestion from claimTasks where tasktype='ZJPD' and taskid=a.claimno) ptasksuggestion
--以上相对占用资源,可改成decode的写法
DECODE(B.TASKTYPE, 'ZJPD', B.TASKSUGGESTION)
FROM APPEALINFO A, CLAIMTASKS B
WHERE B.TASKTYPE = 'SSPD'
AND A.CLAIMNO = B.TASKID
AND APPEALFLAG = '1'
AND 1 = 1
ORDER BY ID DESC
阿冷 2012-06-20
  • 打赏
  • 举报
回复
你这一行莫名其妙啊
(select tasksuggestion from claimTasks where tasktype='ZJPD' and taskid=a.claimno) ptasksuggestion

你到底想要什么功能啊
haoztao 2012-06-20
  • 打赏
  • 举报
回复
大哥哥指导一下 啊

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧