2015-11-25 221 views
0

如何在sql server程序下面进行优化,tblPggg表只有5000条记录,其余表只有50,100,200,10条记录。即使它发生在当地的15/20秒活的服务器上为好,SQL过程需要很长时间?

这是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%的成本去(哈希匹配内部连接)

+0

连接列上的任何索引是否已就位? –

+0

@ shree.part18-否,索引放置在哪一列哪种类型的索引最适合,并且会在2/3秒内产生输出。 – skiskd

+0

看看这个答案开始:http://stackoverflow.com/questions/107132/what-c​​olumns-generally-make-good-indexes –

回答

1
  1. 有ATLEAST 3表中查询其列不打任何role.So显示你的列和实际查询这是需要的功能。

  2. 为什么你使用不同的?由于哪个表,你得到重复records.Is重复记录错误?你能否重写查询的方式是,如果没有使用distinct,你不会得到重复的记录。探测distinct是个好主意,它往往会导致bug。

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