2013-04-30 2 views
0

У меня есть этот запрос, который дает мне результат, который мне нужен, но выполняется очень медленно. Медленность заключается в том, что таблица [Таблица входных данных для столбцов] имеет записи ~ 0.6M. Просьба советовать, как оптимизировать/упростить этот запрос (если это возможно) и какие индексы мне нужно иметь, чтобы это работало лучше всего.оптимизация запросов SQL. медленная производительность

DECLARE @TempTable TABLE 
(
    Numeris varchar(20) 
) 
INSERT INTO @TempTable (Numeris) 
SELECT No_ 
FROM [Contoso$Sales Line] 
WHERE [Document no_] = 'PP03428' 

SELECT I.No_, CASE WHEN 
      ISNULL(ROUND(CAST(SUM(ILE.[Remaining Quantity]) AS float), 2), 0) < 
      (SELECT ISNULL(SUM([Outstanding Quantity]), 0) 
      FROM [Contoso$Sales Line] SL 
      WHERE (SL.No_ = I.No_) 
       AND (SL.[Document type] = 1 OR SL.[Document type] = 2) 
       AND (SL.[DA4 eksportas] = 0) 
       AND (SL.Type = 2) 
      ) 
     THEN 0 
     ELSE 
      ISNULL(ROUND(CAST(SUM(ILE.[Remaining Quantity]) AS float), 2) - 
      (SELECT ISNULL(SUM([Outstanding Quantity]), 0) 
      FROM [Contoso$Sales Line] SL 
      WHERE (SL.No_ = I.No_) 
       AND (SL.[Document type] = 1 OR SL.[Document type] = 2) 
       AND (SL.[DA4 eksportas] = 0) 
       AND (SL.Type = 2)), 0 
      ) 
    END AS Kiekis 
FROM [Contoso$Item] I 
LEFT OUTER JOIN [Contoso$Item Ledger Entry] ILE ON I.No_ = ILE.[Item No_] 
WHERE I.No_ IN (SELECT Numeris FROM @TempTable) 
GROUP BY I.No_ 
+0

Имеет ли '[Contoso $ Item]' индекс на 'No_'? У '[Contoso $ Item Ledger Entry]' есть индекс на '[Item No_]'? Можете ли вы добавить план выполнения запроса на вопрос? –

ответ

0

Используйте план выполнения, чтобы узнать, как выполняется ваш запрос, и знать, почему ваш запрос настолько медленный. Вы можете добавить индекс в столбец No_ таблицы Contoso $ Item, чтобы избежать таблицы fullscan

Смежные вопросы