我在一个大型应用程序中的大约 50 个不同的地方使用了一个存储过程。这 50 个上下文中的一个需要此过程中的附加字段。
我可以想到两种不同的方法:
最佳做法是什么?
在我看来,“最佳实践”并不是一个非常有用的短语 - 这取决于您要优化的目标。
如果您的应用程序代码可以处理附加字段,则只需将该字段添加到结果集中就有很多参数。这是最少的努力,也是最少的复杂性。这并不奇怪 - 存储过程返回结果集是很常见的,然后应用程序代码决定如何处理该结果集(包括忽略某些列)。作为一般的“最佳实践”原则,让单个存储过程返回一个完整的结果集,并让客户端代码决定如何处理该结果集,使 proc 易于使用和重用,只要您不改变结果集,就可以改变程序的执行。在大多数情况下,传输一些额外字节的开销可以忽略不计——如果这是一个问题,那么你就有更大的问题!
编辑以回应@vvgiri 的评论:
如果您必须连接到其他表以获取额外数据,则可能会对性能产生影响。在实践中,只要连接是一个简单的“外键/主键”连接,除非您有大量数据集,否则它可能不会产生可衡量的影响,但值得测试。
这种方法的问题在于您可能需要测试使用存储过程的所有 50 个位置。你没有在你的问题中写下这个;如果这不是问题,我会添加额外的字段。
如果这是一个问题,我会考虑可维护性和“最小惊喜”因素。如果没有具体说明,很难说如果客户端代码调用一个存储过程,然后使用它的结果来获取更多数据,我是否会感到惊讶。但是,如果这会令人惊讶,我会考虑编写一个新程序,其名称清楚地说明其存在的原因。该过程可能应该调用原始过程,然后进行扩充,返回客户端代码所需的结果集。
这种方法意味着您的客户端代码保持“干净” - 没有意外或特殊情况。它重新使用原始过程 - 没有重复。它可能比修改原始 proc 慢,但不会比你的“选项 2”慢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句