Sql 为什么存储过程的重试时间超过50秒?
我有这个程序,它需要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,
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的数据类型是什么?除了其他想法之外,为什么您有不同的数据类型?这通常是将创可贴应用于伤口愈合的伤口。好极了。