Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 server 使用存储过程执行选择、更新、插入的任何禁忌_Sql Server_Performance_Stored Procedures - Fatal编程技术网

Sql server 使用存储过程执行选择、更新、插入的任何禁忌

Sql server 使用存储过程执行选择、更新、插入的任何禁忌,sql-server,performance,stored-procedures,Sql Server,Performance,Stored Procedures,我使用一个SP执行所有CRUD操作 因此,基本上我是在执行同一个SP,具体取决于所需的操作: 乙二醇 感谢我每1个business对象只有1个SP,这使我的数据库保持有序。 但最近我遇到了性能问题。 鉴于我的问题: 这种方法正确吗?它是否会对性能/正确执行产生影响。计划?由于可能缓存“错误”的查询计划,它可能会影响性能。查看主题和 编辑:为了回应John的评论,您还可以让顶级SP决定调用哪个CRUD SP,然后每个SP都将获得自己的缓存查询计划。由于可能缓存“错误”的查询计划,这可能会影响性能。

我使用一个SP执行所有CRUD操作
因此,基本上我是在执行同一个SP,具体取决于所需的操作:

乙二醇

感谢我每1个business对象只有1个SP,这使我的数据库保持有序。 但最近我遇到了性能问题。 鉴于我的问题

这种方法正确吗?它是否会对性能/正确执行产生影响。计划?

由于可能缓存“错误”的查询计划,它可能会影响性能。查看主题和


编辑:为了回应John的评论,您还可以让顶级SP决定调用哪个CRUD SP,然后每个SP都将获得自己的缓存查询计划。

由于可能缓存“错误”的查询计划,这可能会影响性能。查看主题和


编辑:为了回应John的评论,您还可以让顶级SP决定调用哪个CRUD SP,然后每个SP都会得到自己的缓存查询计划。

我认为这更像是一个编码/设计首选项问题

就我个人而言,我非常喜欢保持简单,因此我建议您将操作分解为单独的存储过程


这将更加透明,也有助于您将来可能必须进行的任何性能调整,即,如果您的更新过程/逻辑执行缓慢,您可以立即将其作为原因隔离,而如果逻辑是具有不同CRUD操作的更大过程的一部分,问题的根本原因不会那么明显。

我认为这更像是一个编码/设计偏好问题

就我个人而言,我非常喜欢保持简单,因此我建议您将操作分解为单独的存储过程


这将更加透明,也有助于您将来可能必须进行的任何性能调整,即,如果您的更新过程/逻辑执行缓慢,您可以立即将其作为原因隔离,而如果逻辑是具有不同CRUD操作的更大过程的一部分,这个问题的根本原因不会那么明显。

我也喜欢简化(如果可能的话)

但我决定这样做的原因是:如果我将所有SP按其提供的功能(例如USP_示例_插入、USP_示例_选择1、USP_示例_选择2、, USP_样本_删除)我将有约400个SPs

在如此庞大的SP实例之间管理、导航、更新和同步参数对我来说简直是噩梦


对我来说,唯一合理的做法是性能…

我也喜欢简化(如果可能的话)

但我决定这样做的原因是:如果我将所有SP按其提供的功能(例如USP_示例_插入、USP_示例_选择1、USP_示例_选择2、, USP_样本_删除)我将有约400个SPs

在如此庞大的SP实例之间管理、导航、更新和同步参数对我来说简直是噩梦


对我来说,唯一合理的做法是性能…

Hi Mitch,我认为在SQL 2005及更高版本中,存储过程中的每个批处理/状态都有自己的执行计划?这是为了帮助重新编译,以便在必要时只重新编译特定步骤,而不是整个过程?……因此,参数嗅探肯定会成为所有存储过程的潜在问题,而不仅仅是具有多种crud操作类型的存储过程?@John Sansom:这是正确的。海报暗示他的一个SP执行所有操作。@Mitch:谢谢你的澄清!您好,Mitch,我认为在SQL 2005及更高版本中,存储过程中的每个批处理/状态都有自己的执行计划?这是为了帮助重新编译,以便在必要时只重新编译特定步骤,而不是整个过程?……因此,参数嗅探肯定会成为所有存储过程的潜在问题,而不仅仅是具有多种crud操作类型的存储过程?@John Sansom:这是正确的。海报暗示他的一个SP执行所有操作。@Mitch:谢谢你的澄清!
-- for select
exec USP_ORDER @MODE='S', @ORDER_DATE='2009/01/01'
-- for update
exec USP_ORDER @MODE='U', @other_params
-- for insert
exec USP_ORDER @MODE='I', @other_params
-- for delete
exec USP_ORDER @MODE='D', @ID=100