2013-12-11 3 views
-1

Я использовал следующий запрос, чтобы заполнить мой адаптер таблицы, но когда мое приложение работает, оно происходит так медленно, но когда я запускаю в SQL-менеджере его быстро! дайте мне знать проблему моего выбора и как можно оптимизировать !!!оптимизировать SQL-выбор в методе заполнения tableadapter

SELECT (
     SELECT FullName AS Expr1 
     FROM Sales.CustomerInfo 
     WHERE (AccountFK = Ordering.Orders.CustomerFK) 
     ) AS Customer 
    ,Ordering.Orders.OrderID 
    ,Ordering.Orders.OrderDate 
    ,Ordering.Orders.OrderWayBill 
    ,Ordering.Orders.ExpireDate 
    ,Ordering.ShipperInfo.ShipperCompany 
    ,Production.Store.StoreName 
    ,Production.Product.ProductName 
    ,Ordering.Orders.Quantity 
    ,Ordering.Orders.Price 
    ,Ordering.Orders.ShipAddress 
    ,Ordering.Orders.Description1 
    ,Ordering.Orders.Description2 
    ,Ordering.Orders.Discount 
    ,Ordering.OrderStatus.Description 
    ,Sales.PaymentTerm.Description AS PaymentTerm 
    ,Ordering.Orders.CustomerFK 
    ,Ordering.Orders.ShipperFK 
    ,Ordering.Orders.StoreFK 
    ,Ordering.Orders.ProductCategoryFK 
    ,Ordering.Orders.ProductFK 
    ,Ordering.Orders.OrderStatusFK 
    ,Ordering.Orders.PaymentTermFK 
    ,Ordering.Orders.FinancialPeriodFK 
    ,Ordering.Orders.CompanyInfoFK 
    ,DueDate = (
     SELECT TOP 1 duedate 
     FROM (
      SELECT duedate = DATE 
      FROM banking.receivedcash 
      WHERE orderfk = Ordering.Orders.OrderID 

      UNION ALL 

      SELECT duedate = duedate 
      FROM banking.receivedcheque 
      WHERE orderfk = Ordering.Orders.OrderID 
      ) AS a 
     ORDER BY duedate DESC 
     ) 
FROM Ordering.Orders 
LEFT OUTER JOIN Ordering.ShipperInfo 
    ON Ordering.Orders.ShipperFK = Ordering.ShipperInfo.ShipperInfoID 
LEFT OUTER JOIN Production.Product 
    ON Ordering.Orders.ProductFK = Production.Product.ProductID 
LEFT OUTER JOIN Production.Store 
    ON Ordering.Orders.StoreFK = Production.Store.StoreID 
LEFT OUTER JOIN Ordering.OrderStatus 
    ON Ordering.Orders.OrderStatusFK = Ordering.OrderStatus.OrderStatusID 
LEFT OUTER JOIN Sales.PaymentTerm 
    ON Ordering.Orders.PaymentTermFK = Sales.PaymentTerm.PaymentTermID 
+0

Запускаете ли вы приложение в режиме отладки или выпуска? – TGlatzer

+0

Просто поместите SQL в запрос, тогда производительность должна быть одинаковой. Btw: Ваш SQL обычно выглядит ужасно медленным со всеми этими внешними соединениями. Вы абсолютно уверены, что вызывающий код является виновником? –

+0

@ Grumbler85 протестирован в обоих режимах такой же медленный –

ответ

1

Ваш запрос выполняется медленно, потому что два подзаголовка выполняются для каждой строки. Это будет быстрее, если вы перепишете их как объединения.

+0

Я не могу написать объединение для второго подмножества –

+0

Конечно, вы можете. Думайте 'SELECT MAX (duedate), orderfk FROM ... GROUP BY orderfk' – Twinkles

+0

Мерцание - Возможно, вы могли бы написать полный пример? Обратите внимание, что 'UNION ALL' делает это немного сложнее ... но есть несколько способов обойти это? Но да, я тоже предпочитаю делать такие вещи. –