简体   繁体   English

长T-SQL查询-需要帮助优化

[英]Long T-SQL query - need help optimizing

The query below is taking well over a minute to finish executing on a table with about 12,000 rows. 下面的查询需要花费一分钟多的时间才能完成对大约12,000行的表的执行。 I see why it is this slow due to there being multiple operations per operation but I am unaware of how to write this in a way to reduce the cost. 我知道为什么由于每个操作有多个操作而导致速度如此之慢,但是我不知道如何编写这种方式以降低成本。 Thanks in advance. 提前致谢。

SELECT 
    para.ParagraphGUID, 
    para.Content,
    ChapterNbr, 
    ParagraphNbr,
    paragraphStatus, 
    para.CreateDate, 
    dv.VersionNumber 
FROM 
    tblParagraph para 
LEFT OUTER JOIN 
    tblDocumentVersion dv on dv.ParagraphGUID = para.ParagraphGUID
WHERE 
    ChapterNbr = '1' AND dv.VersionNumber = '14' 
    AND para.ParagraphGUID IN 
        (SELECT TOP 1 one.ParagraphGUID 
         FROM tblParagraph one 
         LEFT OUTER JOIN tblDocumentVersion onedv ON onedv.ParagraphGUID = one.ParagraphGUID 
         WHERE one.ParagraphNbr = para.ParagraphNbr 
           AND one.ChapterNbr = '1' AND onedv.VersionNumber = '14' 
         ORDER BY one.CreateDate DESC)
ORDER BY 
    order by ParagraphNbr ASC

Your correlated query gets executed for each row returned by the outer query hence the performance penalty, use row_number function to get what you are after, something like this..... 您的相关查询将针对外部查询返回的每一行执行,因此会降低性能,请使用row_number函数获取所需内容,如下所示.....

WITH CTE AS (
SELECT para.ParagraphGUID, 
       para.Content,
       ChapterNbr, 
       ParagraphNbr,
       paragraphStatus, 
       para.CreateDate, 
       dv.VersionNumber,
       ROW_NUMBER() OVER (PARTITION BY para.ParagraphGUID ORDER BY para.CreateDate DESC) rn  
FROM tblParagraph para 
LEFT OUTER JOIN tblDocumentVersion dv on dv.ParagraphGUID = para.ParagraphGUID
                                     AND ChapterNbr = '1' 
                                     AND dv.VersionNumber = '14' 
)
SELECT * FROM CTE 
WHERE rn = 1
ORDER BY ParagraphNbr ASC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM