【问题标题】:T-SQL optimizing performance of various stored procedures questionT-SQL优化各种存储过程性能问题
【发布时间】:2010-08-16 00:10:13
【问题描述】:

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

【问题讨论】:

  • 鲍勃,当你说“采取行动”时,你是什么意思?你审核行动吗?您是否正在通过这些过程更新参照完整性?

标签: sql performance tsql stored-procedures


【解决方案1】:

是的。使用标准连接来操作集合而不是 RBAR(Row By Agonizing Row)。即,不是为每一行调用一个函数,而是设计一个连接,对每个适用的行执行所需的操作作为集合操作。

我经常看到开发人员使用“函数对每一行进行操作”,虽然这似乎是封装逻辑的明显方式,但它在 SQL Server 或大多数数据库引擎上表现不佳。

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

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

【讨论】:

  • 嗯,我以为您无法在 select 语句中调用存储过程。如何使用接收 ID 号并在连接中调用它的存储过程?谢谢。
  • @Bob L:我建议你不要这样做。
  • 我明白了...所以让它成为一个函数还是什么?
  • 我不知道这是否是您所说的,但这样的事情是否正确?更新表集 column1=GetFK(column1)
  • @Bob L:是的,这不会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多