[英]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.