【问题标题】:SQL Server Stored Procedure for Fruit Checks with several joins - timing out用于具有多个连接的水果检查的 SQL Server 存储过程 - 超时
【发布时间】:2015-01-30 13:09:28
【问题描述】:

存储过程因为太慢而超时,可能是因为它使用了outer full join

错误

System.Data.SqlClient.SqlException (0x80131904):超时。这 在操作完成之前经过的超时时间或 服务器没有响应。 ---> System.ComponentModel.Win32Exception (0x80004005): 等待操作超时 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, 布尔中断连接

根据我的研究,我认为增加超时可能会解决错误问题,但我也想减少执行时间,任何改进都会受到欢迎。如果需要,我会发布表格结构,但这会很多。另外我不确定增加超时是否是最好的解决方案

/* Stored procedure to get fruits checks that the user has access to*/
ALTER procedure [dbo].[Fruits_GetChecksForUser]
(
    @UserID VARCHAR(200),
    @CheckUrlFilter varchar(256)
)
AS

SELECT Distinct
    Fruits_Checks.*,
    ManagementCommittees.Title As CommitteeName,
    FruitCategories.ID As CategoryID,
    FruitCategories.Title As CategoryName,
    dbo.IsUserInGroup(@UserID, FruitCategories.FruitOfficerGroupID) AS IsUserFruitOfficer,
    dbo.IsUserInGroup(@UserID, Fruits_Checks.AllocatedGroup) AS IsUserCheckResponsible,
    Policies.CompanyID,
    Policies.ID As PolicyID

FROM Groups_UserAccess
INNER JOIN FruitCategories_GroupAccess ON FruitCategories_GroupAccess.GroupID = Groups_UserAccess.GroupID
INNER JOIN FruitCategories ON FruitCategories.ID = FruitCategories_GroupAccess.FruitCategoryID
INNER JOIN Policies ON Policies.ID = FruitCategories.PolicyID
LEFT JOIN Policies_AppSettings ON Policies_AppSettings.PolicyID = Policies.ID
LEFT JOIN Clients_AppSettings ON Clients_AppSettings.ID = Policies.CompanyID
FULL OUTER JOIN Fruits ON Fruits.CategoryID = FruitCategories.ID
INNER JOIN Fruits_Checks ON Fruits_Checks.FruitID = Fruits.ID
INNER JOIN ManagementCommittees on Fruits_Checks.CommitteeID = ManagementCommittees.ID

WHERE 
    Fruits.ID IS NOT NULL 
    AND Fruits_Checks.URL LIKE '%' + @CheckUrlFilter + '%' 

ORDER BY Fruits_Checks.EndDate

【问题讨论】:

    标签: sql performance sql-server-2008 stored-procedures


    【解决方案1】:

    增加时间肯定不是解决办法。看起来不必要/可避免的完整外连接、不同的指令和可能的内联函数调用(也可以看看它们)会大大降低您的查询速度。 至少需要一个执行计划,才能为你提供更详细的答案。

    【讨论】:

    • 我更改了执行计划,它似乎对我有所帮助,谢谢 :),一旦我对测试感到满意,我也会支持你
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2012-04-27
    • 2018-12-14
    相关资源
    最近更新 更多