什么是好的,使用explicite游标,while循环在数据库端或使用前端循环(应用程序端程序)???
编辑: - 嗨,如果我想迭代,我正在使用ado.net异步(断开连接)连接(即我有一个数据表,我正在申请前端数据表上的循环) - 在这种情况下,如果我想迭代哪个在DB端或前端端更好?
答案 0 :(得分:7)
最好的方法是利用SQL的基于集合的特性,并尽可能避免使用游标。如果您可以使用游标将查询重写为使用JOIN
的查询,则应始终这样做。
如果发现必须进行迭代的情况,通常最好在数据库服务器上进行迭代。这是为了避免在应用程序层中进行重复调用数据库的开销。
更新:关于您是否应该在前端进行迭代,这一切都取决于您想要在循环中执行的操作。显示数据?那么肯定,你可能想要在前端迭代。但是,如果您要遍历数据以查找数据库中的其他内容,进行计算等,则最好在数据库服务器上执行此操作。我们需要更多细节来提出详细的建议,现在我们只能说明您提供的信息。
答案 1 :(得分:0)
最好的事情是JOIN
中表达的基于集合的操作(如APPLY
或SQL
)。
然而,有时这是不可能的(因为算法的复杂性或DB侧缺少SQL
方言支持)。
在这种情况下,最好使用DB过程语言循环在DB端处理结果。这将为您节省客户端和服务器之间的往返。
只有当SQL
和过程语言都不足以处理您的数据时,才有必要将数据下载到客户端(以服务器和客户端的批量方式)支持这个并在那里进行处理。
答案 2 :(得分:0)
这取决于您的商业案例。如果你有一个巨大的业务逻辑,我会建议你提交申请。 性能方面 - 尝试使用join子句避免db中的循环。如果这不起作用,那么在数据库端转到while循环。然后在应用程序中循环,然后是游标。
答案 3 :(得分:0)
迭代在数据库中是一件坏事,如果可能的话应该避免。在访问数据库时,不要将此作为首选方法。在您尝试找出基于集合的方式来执行任务之前,您不应该考虑迭代。
阅读本文,了解如何更好地做事: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them