在存储过程中使用extract方法

时间:2013-11-14 08:14:42

标签: sql database performance stored-procedures

Extract方法是编写编程语言时常见的重构模式。

当我尝试对存储过程进行一些重构时,我想知道在编写存储过程(SP)/用户定义函数(UDF)时使用extract方法是否也是一个好习惯,因为我们可以调用其他SP SP / UDF上的/ UDF?

它会影响性能吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我的意见(现在在数据库工作了几年):

存储过程应仅用于数据库任务。例如,迁移数据(当前我正在处理一个转换数据库结构的进程),或者一些动态查询(其中sql语句是动态构建的),或者是构建表的过程(例如保存特定日期范围的日期的表格。

不是为了其他任何东西!对于比上述更复杂的一切,请考虑在应用层上对其进行编码。

另外,您可能听说过将尽可能多的业务逻辑放入数据库是明智的。这对于数据库设计来说确实如此,但这并不意味着您应该编写几乎所有内容。数据库并不擅长(例如谈论数据转换或类似的事情)。像PHP或其他任何编程语言都更快!

因此,对于我使用存储过程的所有内容,我从未觉得需要在额外的过程中添加任何内容。除了例如数据库的重组(在我的情况下,它是一个ETL过程(它将数据非规范化为星型模式以获得更好的性能)),我在那里为每个表编写了一个过程,并且这些过程是从管理它的过程中调用的。整个过程。但同样,它与编程语言完全不同。

此外,当我将此示例用于提取方法模式http://www.refactoring.com/catalog/extractMethod.html时 在你的数据库中有这样的东西将成为调试的噩梦,你将花费太多时间编码。同样,应该使用存储过程的情况不是应用提取方法模式的情况。