Настройка и оптимизация запросов - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок в T SQL. Здесь вопрос. Как я могу оптимизировать запрос ниже и улучшить время выполнения? Этот SP выполняется внутри курсора, но разрешено изменять только этот фрагмент. Я думаю об использовании временных таблиц. Спасибо

    CREATE PROCEDURE dbo.GetProductFromHistory 
    @ProductID INT
AS
BEGIN
    DECLARE @Result TABLE(
        PurchaseOrderNumber NVARCHAR(25),
        TransactionID INT
    )

    INSERT INTO @Result(PurchaseOrderNumber, TransactionID)
    SELECT soh.PurchaseOrderNumber, th.TransactionID
    FROM Production.TransactionHistory th
    INNER JOIN Sales.SalesOrderHeader soh on th.ReferenceOrderID = soh.SalesOrderID
    WHERE th.ProductID = @ProductID;

END

GO

1 Ответ

0 голосов
/ 12 февраля 2020

Ничего не поделаешь. Запуск SP внутри курсора l oop - это совсем НЕ то, как вы это делаете, и это сделает все очень медленно, но вы, по вашим собственным словам, не можете изменить этот факт.

Учитывая, что вы иметь один идентификатор и что выход также определен - это столь же простой оператор выбора, как и получаемый, и вы ничего не можете оптимизировать в этом коде. Очевидно, что должен быть индекс по обоим соответствующим полям (th.ProductID, th.ReferenceOrderID и soh.SalesOrderID), но опять же, это не часть запроса (но ошибка, которую я обычно видел часто).

Суть в том, что наличие этого SP внутри al oop - это то, что делает его медленным, а не маленький код, который у вас есть.

...