为什么存储过程的检索时间超过 50 秒?

Why the stored procedure is taking more than 50 seconds to retrive?

我有这个程序,它需要 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 table 有 25000 条记录,否则其他 table 的记录少于 1000 条。

Tpl 碎片为 30%。

如何加快速度?

case语句需要时间。如何改进?

对于 25,000 条记录,SQL 应该不费吹灰之力,即使在 WHERE 子句中使用 CASE 语句也是如此。每个 JOIN 谓词都有索引吗?即:

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

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

[tc].[ClientID]

[tpl].[ProjectNo]

您可以在输入 select 之前使用 IF 语句计算 @Emp。也许您将需要 运行 2 个查询,但是两者都应该比 1 with case in where 更快地完成。