Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Sql 为什么存储过程的重试时间超过50秒?_Sql_Sql Server_Stored Procedures_Sql Server 2005 - Fatal编程技术网

Sql 为什么存储过程的重试时间超过50秒?

Sql 为什么存储过程的重试时间超过50秒?,sql,sql-server,stored-procedures,sql-server-2005,Sql,Sql Server,Stored Procedures,Sql Server 2005,我有这个程序,它需要50秒来获取记录 Declare @Emp int Set @Emp= 0 SELECT DISTINCT tp.ProjectNo+' | '+tp.ProjectName as ProjectNo, tp.ProjectID as ID, ISNULL(sp.ClientID,0) ClientID,

我有这个程序,它需要50秒来获取记录

Declare 
        @Emp int
        Set @Emp= 0

    SELECT DISTINCT tp.ProjectNo+' | '+tp.ProjectName as ProjectNo,   
                    tp.ProjectID as ID, 
                    ISNULL(sp.ClientID,0) ClientID,
                    ISNULL(tc.ClientName, '') ClientName
    FROM tp 
            Inner Join sp ON tp.ProjectID = sp.ProjectID
            Inner Join TC ON sp.clientid = tc.ClientID
            Inner Join tpl ON tpl.ProjectNo = tp.ProjectNo
    WHERE   tpl.EmployeeNo = case when @Emp = 0 then tpl.EmpNo else @Emp end
只有tpl表有25000条记录,否则其他表的记录少于1000条

第三方物流碎片化率为30%

我如何加速它


陈述案例需要时间。如何改进?

对于25000条记录,即使WHERE子句中有CASE语句,SQL也不应该感到紧张。每个连接谓词都有索引吗?即:

[tp].[ProjectID]
[tp].[ProjectNo]

[sp].[ProjectID]
[sp].[clientid]

[tc].[ClientID]

[tpl].[ProjectNo]

在输入select之前,可以使用IF语句计算@Emp。也许您需要运行两个查询,但两个查询的完成速度都应该比where中的1快。

您可以共享一个执行计划吗?那么表结构和索引呢?我还要敦促你将你的问题格式化并保持一致。别名有不同的语法选项,并且联接与格式不一致。我不太确定你说的第三方物流碎片化是30%。这就是索引碎片吗?不管答案是什么,这意味着每3行中就有1行会受到碎片的影响…修复这个问题。是否为这些表定义了索引?ProjectNo的数据类型是什么?除了其他想法之外,为什么您有不同的数据类型?这通常是将创可贴应用于伤口愈合的伤口。好极了。