首页 > 解决方案 > SQL Server 存储过程性能影响

问题描述

我想编写可用于多用途的存储过程。谁能帮助我从这些方法中找到在 SQL Server 中编写存储过程的最佳实践?它们每个对性能的影响是什么?

方法一:参数@KEY、@VALUE

IF @KEY = 'ISACTIVE'
BEGIN 
    SELECT ID, STATECODE, STATENAME, ISACTIVE 
    FROM STATE 
    WHERE ISACTIVE = @VALUE
END
ELSE IF @KEY = 'STATECODE'
BEGIN
    SELECT ID, STATECODE, STATENAME, ISACTIVE 
    FROM STATE  
    WHERE STATECODE = @VALUE
END
ELSE
BEGIN
    SELECT ID, STATECODE, STATENAME, ISACTIVE 
    FROM STATE
END

方法:2个参数@ISACTIVE,@STATECODE

SELECT ID, STATECODE, STATENAME, ISACTIVE 
FROM STATE
WHERE ISACTIVE = ISNULL(@ISACTIVE, ISACTIVE) 
  AND STATECODE = ISNULL(@STATECODE,STATECODE)

方法:3

参数@KEY、@VALUE

DECLARE @SQLQRY NVARCHAR(500)
SET @SQLQRY = 'SELECT ID, STATECODE, STATENAME, ISACTIVE FROM STATE WHERE ' + @KEY +' = ' + @VALUE
EXEC @SQLQRY

就性能和可重用性而言,哪一种是最好的方法?

或者还有其他选择可以实现这一目标吗?

标签: sqlsql-serverstored-procedures

解决方案


我肯定会使用Approach 2,在我看来,它既可维护又可永久使用。

方法 1中,您正在复制代码,因此在维护方面它不是最好的方法。

在使用动态 sql 查询的方法 3中,这不是最好的处理方式,因为它不提供智能感知支持,并且限制了 SQL 服务器优化性能的能力。

如果您遇到任何性能问题,请考虑在“ISACTIVE”和“STATECODE”列上引入索引。如果需要,还分析查询执行计划并使用分析器进行进一步调查。


推荐阅读