SQL语句优化请教

「已注销」 2012-11-30 06:19:22
视图又包括视图。执行返回几千条数据都很慢了。。故来请教如何优化


SELECT PKID, FlowID, UrgencyLevel, TypeNumber, FileTitle, FileZiHao, FileType, CurUser, CurID, ZeRenZe, CurNodeName, Lock, Status, Url, LastUser,
LastTime, LastActionName
FROM dbo.vToDoFaWen(视视图名)
UNION
SELECT PKID, FlowID, UrgencyLevel, TypeNumber, FileTitle, FileZiHao, FileType, CurUser, CurID, ZeRenZe, CurNodeName, Lock, Status, Url, LastUser,
LastTime, LastActionName
FROM dbo.vToDoShouWen(视图名)
UNION
SELECT PKID, FlowID, UrgencyLevel, TypeNumber, FileTitle, FileZiHao, FileType, CurUser, CurID, ZeRenZe, CurNodeName, Lock, Status, Url, LastUser,
LastTime, LastActionName
FROM dbo.vToDoLianHeFaWen(视图名)
UNION
SELECT PKID, FlowID, UrgencyLevel, TypeNumber, FileTitle, FileZiHao, FileType, CurUser, CurID, ZeRenZe, CurNodeName, Lock, Status, Url, LastUser,
LastTime, LastActionName
FROM dbo.vToDoNeiFaWen(视图名) --------以上是视图

----vToDoFaWen
SELECT O.PKID, F.FlowID, U.ShowName AS UrgencyLevel, U.TypeNumber, F.Title AS FileTitle, F.FileZi + '[' + LTRIM(STR(F.FileYear))
+ ']' + LTRIM(STR(F.FileNumber)) AS FileZiHao, '发文' AS FileType, O.CurUser, O.CurID, F.Remark2 AS ZeRenZe, O.CurNodeName, O.Lock, O.Status,
'FaWen.aspx?id=' + LTRIM(STR(O.PKID)) AS Url,
(SELECT TOP (1) CurUserName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastUser,
(SELECT TOP (1) CurTreatTime
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastTime,
(SELECT TOP (1) ActionsName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastActionName
FROM dbo.FlowControl AS O INNER JOIN
dbo.FaWen AS F ON O.PKID = F.ParentID INNER JOIN
dbo.FileUngencys AS U ON U.TypeName = F.UrgencyLevel
WHERE (O.SysStatus = 1) AND (O.TypeID = 1) ----- vToDoFaWen 视图


------vToDoShouWen 视图

SELECT O.PKID, S.FlowID, U.ShowName AS UrgencyLevel, U.TypeNumber, S.Title AS FileTitle, S.FileZi AS FileZiHao, '收文' AS FileType, O.CurUser, O.CurID,
S.ComeOrg AS ZeRenZe, O.CurNodeName, O.Lock, O.Status, 'ShouWen.aspx?id=' + LTRIM(STR(O.PKID)) AS Url,
(SELECT TOP (1) CurUserName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastUser,
(SELECT TOP (1) CurTreatTime
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastTime,
(SELECT TOP (1) ActionsName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastActionName
FROM dbo.FlowControl AS O INNER JOIN
dbo.ShouWen AS S ON O.PKID = S.ParentID INNER JOIN
dbo.FileUngencys AS U ON U.TypeName = S.UrgencyLevel
WHERE (O.SysStatus = 1) ----vToDoShouWen 视图

------vToDoLianHeFaWen 视图
SELECT O.PKID, F.FlowID, U.ShowName AS UrgencyLevel, U.TypeNumber, F.Title AS FileTitle, F.FileZi + '[' + LTRIM(STR(F.FileYear))
+ ']' + LTRIM(STR(F.FileNumber)) AS FileZiHao, '联合发文' AS FileType, O.CurUser, O.CurID, F.Remark2 AS ZeRenZe, O.CurNodeName, O.Lock,
O.Status, 'LianHeFaWen.aspx?id=' + LTRIM(STR(O.PKID)) AS Url,
(SELECT TOP (1) CurUserName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastUser,
(SELECT TOP (1) CurTreatTime
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastTime,
(SELECT TOP (1) ActionsName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastActionName
FROM dbo.FlowControl AS O INNER JOIN
dbo.FaWen AS F ON O.PKID = F.ParentID INNER JOIN
dbo.FileUngencys AS U ON U.TypeName = F.UrgencyLevel
WHERE (O.SysStatus = 1) AND (O.TypeID = 2)------vToDoLianHeFaWen 视图




---vToDoNeiFaWen 视图

SELECT O.PKID, F.FlowID, U.ShowName AS UrgencyLevel, U.TypeNumber, F.Title AS FileTitle, F.FileZi + '[' + LTRIM(STR(F.FileYear))
+ ']' + LTRIM(STR(F.FileNumber)) AS FileZiHao, '内部发文' AS FileType, O.CurUser, O.CurID, F.Remark2 AS ZeRenZe, O.CurNodeName, O.Lock,
O.Status, 'NeiFaWen.aspx?id=' + LTRIM(STR(O.PKID)) AS Url,
(SELECT TOP (1) CurUserName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastUser,
(SELECT TOP (1) CurTreatTime
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastTime,
(SELECT TOP (1) ActionsName
FROM dbo.FlowConceit AS N
WHERE (O.PKID = ParentID)
ORDER BY PKID DESC) AS LastActionName
FROM dbo.FlowControl AS O INNER JOIN
dbo.FaWen AS F ON O.PKID = F.ParentID INNER JOIN
dbo.FileUngencys AS U ON U.TypeName = F.UrgencyLevel
WHERE (O.SysStatus = 1) AND (O.TypeID = 3)





...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2012-12-01
  • 打赏
  • 举报
回复
我看你基本上每次都对基础表有过滤 (O.SysStatus = 1) AND (O.TypeID = 3) 你先把你fawen shouwen这些数据组织好,再跟基础表关联,基础表的过滤次数就减少了 应该会好一点吧
「已注销」 2012-12-01
  • 打赏
  • 举报
回复
ee。。好的。谢了
专注or全面 2012-12-01
  • 打赏
  • 举报
回复
你先把fawen shouwen 这些表练成一个视图,再去关联你的其他两个表,不用每次都去关联你的基础表,其他两个表的关联字段和查询条件上上建立索引,试试
xiabanghu 2012-12-01
  • 打赏
  • 举报
回复
不要直接在这边打出来,请在你sql server management studio 里面打出来,这样方便大家看
「已注销」 2012-11-30
  • 打赏
  • 举报
回复
求详细点..谢谢
SQL77 2012-11-30
  • 打赏
  • 举报
回复
那些个SELECT TOP 1 一次取出来再关联其他表就行

其余的发表不了。
發糞塗牆 2012-11-30
  • 打赏
  • 举报
回复
能直接改成基础表吗?视图性能没有直接访问基础表好。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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