【发布时间】:2016-02-23 10:59:20
【问题描述】:
我已经查询了
Select
-- Generate the row number
ROW_NUMBER() over(order by MenuOrder) as 'rownum',
-- get the minimum data from query
(Select top 1 ROW_NUMBER()over(order by MenuOrder)
from SitePage where ActiveFlag='true' AND SiteId=1083 and LanguageId=159 AND ChildOf=0 order by MenuOrder asc) as 'min',
-- get the maximum data from query
(Select top 1 ROW_NUMBER()over(order by MenuOrder) from SitePage where ActiveFlag='true' and LanguageId=159 AND SiteId=1083 AND ChildOf=0
order by MenuOrder desc) as 'max',
-- get rest of all details
*,(case when exists(select *from SitePage where ChildOf = AP.SitePageId and ActiveFlag =1 ) then 'Y' else 'N' end) as [Type] from SitePage AP
where ActiveFlag=1 AND SiteId=1083 AND ChildOf=0 and LanguageId=159 order by MenuOrder
在那之后,当我看到查询性能时,它需要很长时间才能执行,这会在 sql server 上产生负载,导致服务器意外停机
这里是 total_elapsed_time_in_Seconds:61480
如何减少 total_elapsed_time_in_Seconds
【问题讨论】:
-
您应该查看执行计划。这些表上有索引吗?而且我不确定“min”子查询是否可以返回与 1 不同的东西。你能澄清“min”和“max”子查询的作用吗?为什么不排名第一,为什么
MenuOrder不符合您的需求。查看ActiveFlag字段使用情况:它是数字/微小还是varchar?
标签: sql sql-server performance optimization query-optimization