Нижеприведенный запрос занимает более минуты, чтобы завершить выполнение на столе с примерно 12 000 строк. Я понимаю, почему это происходит медленно из-за того, что на операцию приходится несколько операций, но я не знаю, как написать это, чтобы снизить стоимость. Заранее спасибо.Длинный запрос T-SQL - нужна помощь по оптимизации
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
попробовать используя EXISTS, а не IN – HLGEM
Также этот код превращает левое соединение во внутреннее, так что вы, вероятно, не знаете правильных результатов. LEFT OUTER JOIN tblDocumentVersion onedv на onedv.ParagraphGUID = one.ParagraphGUID WHERE one.ParagraphNbr = para.ParagraphNbr И one.ChapterNbr = '1' AND onedv.VersionNumber = '14' – HLGEM
Если вы не имеете индексы уже, tblParagraph .ParagraphGUID как кластерный индекс и tblDocumentVersion.ParagraphGUID как некластеризованный индекс. Кроме того, в зависимости от количества записей, идентификатор GUID может быть не лучшим вариантом для ID, обычно это лучший выбор. – Zukki