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
T-SQL优化各种存储过程的性能问题_Sql_Performance_Tsql_Stored Procedures - Fatal编程技术网

T-SQL优化各种存储过程的性能问题

T-SQL优化各种存储过程的性能问题,sql,performance,tsql,stored-procedures,Sql,Performance,Tsql,Stored Procedures,因此,我编写了几个存储过程,它们通过输入一个ID号来对数据的各行进行操作。我想保留几个存储过程,这些存储过程可以在数据库方案的不同级别调用此存储过程。例如,当插入一行时,我调用此存储过程。当修改其他内容时,我希望为每一行调用此存储过程。这样我就可以有一组基本代码,可以在其他任何地方调用,但作用于不同数量的数据。我已经能够用游标产生这个结果,但是我被告知这些是非常低效的。有没有其他方法可以在不牺牲性能的情况下实现这种功能?谢谢 是的。使用标准联接对集合而不是RBAR(逐行)进行操作。i、 e.不是

因此,我编写了几个存储过程,它们通过输入一个ID号来对数据的各行进行操作。我想保留几个存储过程,这些存储过程可以在数据库方案的不同级别调用此存储过程。例如,当插入一行时,我调用此存储过程。当修改其他内容时,我希望为每一行调用此存储过程。这样我就可以有一组基本代码,可以在其他任何地方调用,但作用于不同数量的数据。我已经能够用游标产生这个结果,但是我被告知这些是非常低效的。有没有其他方法可以在不牺牲性能的情况下实现这种功能?谢谢

是的。使用标准联接对集合而不是RBAR(逐行)进行操作。i、 e.不是为每一行调用函数,而是设计一个联接,作为集合操作在每一行上执行所需的操作

我经常看到开发人员使用“函数在每行上运行”,尽管这似乎是封装逻辑的明显方式,但它在SQL Server或大多数DB引擎上的性能并不好

在某些情况下,可以有效地使用表值函数(MS SQL Server)


(顺便说一句,你说游标效率低下是正确的)。

是的。使用标准联接对集合而不是RBAR(逐行)进行操作。i、 e.不是为每一行调用函数,而是设计一个联接,作为集合操作在每一行上执行所需的操作

我经常看到开发人员使用“函数在每行上运行”,尽管这似乎是封装逻辑的明显方式,但它在SQL Server或大多数DB引擎上的性能并不好

在某些情况下,可以有效地使用表值函数(MS SQL Server)


(顺便说一句,你说的游标效率低下是正确的)。

Hmm,我以为你不能在select语句中调用存储过程。如何使用接收ID号并在联接中调用它的存储过程?谢谢。@Bob L:我建议你不要。我明白了。。。所以,让它成为一个函数或什么的?我不知道这是否是你说的,但像这样的东西是正确的吗?update table set column1=GetFK(column1)@Bob L:是的,这不会很好地执行。嗯,我以为您无法在select语句中调用存储过程。如何使用接收ID号并在联接中调用它的存储过程?谢谢。@Bob L:我建议你不要。我明白了。。。所以,让它成为一个函数或什么的?我不知道这是否是你说的,但像这样的东西是正确的吗?更新table set column1=GetFK(column1)@Bob L:是的,这样做效果不好。Bob,你说“行动”是什么意思?您是否审核该操作?你是通过这些过程来更新引用完整性的吗?鲍勃,当你说“按”是什么意思?您是否审核该操作?您是否通过这些过程更新引用完整性?