SQL程序需要很长时间?

时间:2015-11-25 06:57:00

标签: sql-server sql-server-2012

如何优化下面的sql server程序,tblPggg表只有5000条记录,而rest表只有50,100,200,10条记录。即使它在本地服务器上也需要15/20秒,

这是在sql server 2012上运行的 如果可能,还要针对SQL

中的注释列进行优化
        select distinct    
    tblppp.Name as Name,
    tblppp.pid as ID,
    tblgpp.FirstName +' '+ tblgpp.LastName as gName,
    tblgpp.GID  as gid,
    tblPggg.prEntryID,
    tblPggg.Start,
    tblPggg.End,
    CONVERT(nvarchar(50),DATEDIFF(MINUTE,tblPggg.Start,tblPggg.End)) +' minutes' as Duration,    
    tblPggg.Status as status
    --,[dbo].funcGetRatingOfPatrolRun(tblppp.pid,tblPggg.prEntryID) as PatrolRating -- commented

    from tblPggg (nolock) as tblPggg  inner join
    tblppp (nolock) as tblppp on tblPggg .pid = tblppp.pid inner join
    tblgpp (nolock) as tblgpp on tblgpp.GID=tblPggg .GID inner join    
    tblsss (nolock) as tblsss on patrolRun.SiteID = tblsss.SiteID inner join
    tblAaaa (nolock) as tblAaaa on tblsss.AreadID =tblAaaa.AreaID inner join
    tblCccc (nolock) as tblCccc on tblsss.ClientID = tblCccc.ClientID 

当我显示查询估计执行计划时,它显示我49%的成本(Hash Match Inner join)

1 个答案:

答案 0 :(得分:1)

  1. 您的查询中至少有3个表,其列没有任何角色。因此,您需要使用列和函数显示您的真实查询。

  2. 你为什么使用distinct?由于哪个表,你得到重复记录。是否重复记录错误?您是否可以重新编写查询,以便在不使用distinct的情况下获取重复记录。探测不同是一个好主意。这通常会导致错误。

  3. 在仅优化查询后,您可以考虑索引。