哪个更贵?对于循环或数据库调用?

时间:2009-09-07 19:53:00

标签: database performance for-loop

一般来说哪个更贵?一个双嵌套的for循环,一次调用数据库或只调用一个for循环中的每个N项的数据库?

没有寻找一个微秒的答案,只是对我应该采取的方向的一般概念。

TIA。

7 个答案:

答案 0 :(得分:43)

通常,您点击数据库的次数越少越好。这有很多原因,包括:

  • 如果数据库可以尝试一次性获取所有内容,则数据库将能够更好地进行优化
  • 您可以多次删除与数据库通信的所有开销,这可能非常重要

答案 1 :(得分:8)

通常,在内存中完成的任何操作(for循环)都比在网络上完成的操作(数据库调用)更快。但是:

for i = 1 to num_users
    get user from database
end

将慢于

get users 1 to num_users from database (in one query)

因为这是数字次你向数据库询问真正重要的事情。

答案 2 :(得分:3)

如果您要处理每个项目,只需拨打一个电话,除非它会使用大量的内存。

答案 3 :(得分:3)

这在很大程度上取决于。

如果您只有几百个项目,嵌套循环将比数据库调用快得多。 数据库调用通常涉及通过局域网或更糟糕的互联网进行数据传输。每次都必须解析查询,依此类推。

但是,如果您在一个数据库查询中搜索了数千或数百万个项目,那么sql查询将快得多,因为数据库系统已经过高度优化以处理大量数据。但是别忘了为你的表创建索引。

如果有疑问,您应该测量每种方法所需的时间,以及它是否能让您更好地了解性能的表现。

答案 4 :(得分:2)

只需轻轻一击:数据库调用很可能会更昂贵。至少这是我目前所经历的......

答案 5 :(得分:2)

通常,访问数据库越少越好。

答案 6 :(得分:0)

我认为这取决于你在做什么。您的陈述中没有足够的信息。

以上答案都是正确的,您访问数据库越少(通常)。因此,您应该尝试在尽可能少的数据库调用中执行特定操作。我认为唯一的例外是,您的应用程序比数据库更快,可能是在执行复杂的数据转换,或者使用效率非常低的数据库。

通常,让数据库以set形式进行数据转换通常比使用for循环中的游标以编程方式进行数据转换更快。如果这不是你熟悉的事情,我建议学习更多的SQL或者获得像SQL Cookbook那样的好书怎么样(注意:我与O'Reilly没有关系,那本书只是对我非常有帮助。)