Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在tableadapter填充方法中优化SQL选择_C#_Sql_Visual Studio 2010_Performance_Tableadapter - Fatal编程技术网

C# 在tableadapter填充方法中优化SQL选择

C# 在tableadapter填充方法中优化SQL选择,c#,sql,visual-studio-2010,performance,tableadapter,C#,Sql,Visual Studio 2010,Performance,Tableadapter,我使用了下面的查询来填充我的表适配器,但当我的应用程序运行时,它非常慢,但当我在sql管理中运行时,它非常快!让我知道我的选择的问题,以及如何可以更优化 SELECT ( SELECT FullName AS Expr1 FROM Sales.CustomerInfo WHERE (AccountFK = Ordering.Orders.CustomerFK) ) AS Customer ,Ordering.Orders.O

我使用了下面的查询来填充我的表适配器,但当我的应用程序运行时,它非常慢,但当我在sql管理中运行时,它非常快!让我知道我的选择的问题,以及如何可以更优化

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

您的查询很慢,因为每行都执行两个子选择。如果将它们重写为联接,速度会更快。

应用程序是在调试模式还是发布模式下运行的?只需将SQL放入查询中,性能应该是相同的。顺便说一句:在所有这些外部联接中,您的SQL通常看起来非常慢。您是否绝对确定调用代码是罪魁祸首???@Grumbler85在两种模式下都进行了测试slow@ThomasWeller你知道比外部联接更好的选择吗?让我知道吗?@franchesco totti你可以将你的子选择重写为连接。但是你的问题不是关于代码和SSM之间的性能差异吗?我不能为第二个子类编写连接,你可以。思考
选择MAX(duedate),orderfk FROM。。。按顺序分组FK
Twinkles-也许你可以写出一个完整的例子?请注意,
UNION ALL
确实让它变得有点棘手。。。但是有几种方法可以解决这个问题?但我也喜欢这样做。