2015-11-25 217 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. 只優化您的查詢後,您可以考慮索引。