2013-12-11 38 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放入查詢中,那麼性能應該是相同的。順便說一句:你的SQL通常看起來很慢,所有這些外連接。你確定調用代碼是罪魁禍首嗎? –

+0

@ Grumbler85在兩種模式下測試的速度相當慢 –

回答

1

由於每行都執行兩個子查詢,因此查詢速度很慢。如果將它們重寫爲連接,速度會更快。

+0

我不能寫第二個子集的聯接 –

+0

當然可以。想想'SELECT MAX(duedate),orderfk FROM ... GROUP BY orderfk' – Twinkles

+0

Twinkles - 也許你可以寫出一個完整的例子嗎?請注意'UNION ALL'的確使它變得更棘手......但是有幾種方法呢?但是,我更喜歡做這樣的事情。 –