Sql 如何优化和提高以下代码的性能?它获取大量记录,因此性能较慢
如何优化和提高以下Sql存储过程的性能?它获取大量记录,因此导致性能低下 该列也是非聚集索引器Sql 如何优化和提高以下代码的性能?它获取大量记录,因此性能较慢,sql,sql-server,performance,stored-procedures,Sql,Sql Server,Performance,Stored Procedures,如何优化和提高以下Sql存储过程的性能?它获取大量记录,因此导致性能低下 该列也是非聚集索引器 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET NOCOUNT ON GO -根据T从tblA中选择所有记录 查询的执行时间应最短,并应进行优化。您是否有关于tblA字段T的索引?而且。。。表和预期结果中大约有多少条记录?能否对存储在表中的数据应用修剪?看起来这两个查询之间的唯一区别在于顺序。如果是这样的话,当@t='ABC'然后是V END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO
-根据T从tblA中选择所有记录
查询的执行时间应最短,并应进行优化。您是否有关于tblA字段T的索引?而且。。。表和预期结果中大约有多少条记录?能否对存储在表中的数据应用修剪?看起来这两个查询之间的唯一区别在于顺序。如果是这样的话,当@t='ABC'然后是V END时,您可以只进行一个查询并按大小写顺序,Seq@AngelM. 是的,我在tblA字段“T”上有一个非聚集索引。有超过8k条记录,预期结果大约有7k条记录。如果您返回了几乎所有的记录,并且您的索引没有包含SELECT as中的所有字段,则根本不会使用它。但我很惊讶,它在如此小的数据量上怎么能表现得如此缓慢。您的桌子的大小(Mb)?
ALTER PROC [dbo].[Usp_SP1]
@T nvarchar(50)
AS
IF @T = 'ABC'
BEGIN
SELECT
xyz as [XYZK],
COALESCE(RTRIM(LTRIM(T)),'') AS T,
COALESCE(RTRIM(LTRIM(V)),'') AS V,
COALESCE(RTRIM(LTRIM(Des)),'') AS Des,
COALESCE(Seq, 0) AS Seq,
COALESCE(Ac,0) AS Ac,
COALESCE(RTRIM(LTRIM(U)),'') AS U,
COALESCE(Ac,0) AS Ac,
COALESCE(L,0) AS _L,
COALESCE(M,0) AS _M,
COALESCE(E,0) AS _E,
COALESCE(S,0) AS _S
FROM tblA WITH (NOLOCK)
WHERE T = @T ORDER BY V, Seq
END
ELSE
BEGIN
SELECT
xyz as [XYZK],
COALESCE(RTRIM(LTRIM(T)),'') AS T,
COALESCE(RTRIM(LTRIM(V)),'') AS V,
COALESCE(RTRIM(LTRIM(Des)),'') AS Des,
COALESCE(Seq, 0) AS Seq,
COALESCE(Ac,0) AS Ac,
COALESCE(RTRIM(LTRIM(U)),'') AS U,
COALESCE(Ac,0) AS Ac,
COALESCE(L,0) AS _L,
COALESCE(M,0) AS _M,
COALESCE(E,0) AS _E,
COALESCE(S,0) AS _S
FROM tblA WITH (NOLOCK)
WHERE T = @T ORDER BY Seq
END
SET NOCOUNT OFF
GO