SQL语句性能优化问题,在线等!!!

donet_hli 2012-03-06 02:53:21
下面2段SQL语句都封装成了视图,代码如下:

--视图名称为:_en_wk_vAppAndLog
SELECT a.wfappid, a.wfappname, l.processid, l.duedt, l.alarmdt, l.path, l.todoid, l.elapsedwksec, p.tp,
p.name, p.wkid, l.createdate, l.actiondate, l.actionby,
l.actionbyname, f.endby, t.wftypename, t.wftypeid
FROM dbo._en_wk_log AS l INNER JOIN
dbo._en_wk_flow AS f ON l.flowid = f.id LEFT OUTER JOIN
dbo._en_wk_process AS p ON f.wkid = p.wkid AND p.id = l.processid LEFT OUTER JOIN
dbo._en_wk_master AS msc ON msc.id = f.wkid LEFT OUTER JOIN
dbo._en_wk_diagram AS d ON d.diagid = msc.diagid LEFT OUTER JOIN
dbo._en_wk_application AS a ON a.diagid = d.diagid INNER JOIN
dbo._en_wk_applicationtype AS t ON a.wftypeid = t.wftypeid
WHERE (f.wfappid IS NULL OR f.wfappid = ' ') AND (a.wfappname <> '选择审计流程类型') AND (a.wfappname <> '项目总览表')

下面的视图效率极慢,导致页面无法正常展示,SQL语句如下:

--视图名称为:_en_wk_vAppModelStat
SELECT a.wfappid, a.wfappname, a.summin, s.startprocess, e.endprocess, t.totalprocess,
t.wftypename, t.wftypeid, CAST(a.summin AS float) / t.totalprocess AS avgmin,
p.sumelapse, ps.sumelapseint, CAST(em.emsummin AS float) / e.endprocess AS emavgmin
FROM (SELECT wfappid, wfappname, SUM(CAST(elapsedwksec / 60 AS int)) AS summin FROM dbo._en_wk_vAppAndLog
GROUP BY wfappid, wfappname) AS a INNER JOIN
(SELECT wfappid, wfappname, COUNT(*) AS startprocess FROM dbo._en_wk_vAppAndLog WHERE (tp = 'start')
GROUP BY wfappid, wfappname) AS s ON a.wfappid = s.wfappid LEFT OUTER JOIN
(SELECT wfappid, wfappname, COUNT(*) AS endprocess FROM dbo._en_wk_vAppAndLog WHERE (tp = 'end')
GROUP BY wfappid, wfappname) AS e ON a.wfappid = e.wfappid LEFT OUTER JOIN
(SELECT wfappid, wfappname, SUM(CAST(elapsedwksec / 60 AS int)) AS emsummin FROM dbo._en_wk_vAppAndLog WHERE (NOT (endby IS NULL))
GROUP BY wfappid, wfappname) AS em ON a.wfappid = em.wfappid INNER JOIN
(SELECT wfappid, wfappname, wftypename, wftypeid, COUNT(*) AS totalprocess FROM dbo._en_wk_vAppAndLog
GROUP BY wfappid, wfappname, wftypename, wftypeid) AS t ON a.wfappid = t.wfappid LEFT OUTER JOIN
(SELECT wfappid, wfappname, COUNT(*) AS sumelapse FROM dbo._en_wk_vAppAndLog WHERE (actiondate > duedt)
GROUP BY wfappid, wfappname) AS p ON a.wfappid = p.wfappid LEFT OUTER JOIN
(SELECT wfappid, wfappname, COUNT(*) AS sumelapseint
FROM (SELECT wfappid, wfappname, processid FROM dbo._en_wk_vAppAndLog
WHERE (actiondate > duedt)
GROUP BY wfappid, wfappname, processid) AS pe
GROUP BY wfappid, wfappname) AS ps ON a.wfappid = ps.wfappid

执行该视图语句Select * From "_en_wk_vAppModelStat" p order by p.wfappname的耗时为20秒左右。。。
请教各位牛人如下优化,小弟感激不尽,在线等!!!
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
勿勿 2012-03-06
  • 打赏
  • 举报
回复
create index in_wfappname on en_wk_vAppModelStat (wfappname)  
看行吗
勿勿 2012-03-06
  • 打赏
  • 举报
回复
图没了
justin_hli 2012-03-06
  • 打赏
  • 举报
回复


donet_hli 2012-03-06
  • 打赏
  • 举报
回复
页面展示效果为:
  • 打赏
  • 举报
回复
where ,group后面的字段加索引

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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