哪个更快:从内存或大量查询工作?

时间:2010-06-22 18:52:53

标签: .net sql database

您需要从本地SQL服务器中提取大量数据(数千个条目)以用于生成报告。您有两种选择:

1)使用单个查询从服务器获取数据,将其加载到.NET数据表中并使用一系列循环来获取所需信息

2)每次需要记录时执行SQL查询

我知道有几个影响速度的因素,但只有给出的信息,您认为哪个更快?

6 个答案:

答案 0 :(得分:2)

没有任何更多信息,我说选项1.您可以在往返数据库并下载结果集所花费的时间内执行 LOTS 的CPU操作。另外,我认为编写C#逻辑比编写T-SQL逻辑更容易。但是,如果您正在讨论集查询,那么SQL可能更容易编写。最后,我会做任何更容易编写的内容,然后如果它太慢则更改它。

是的,我们在这里谈论了多少个查询? 5,10,100?如果它是5个查询,则时间不会很糟糕,但如果您正在对每条记录进行查询,并且您可以拥有大量记录,那么从不想要这样做。

答案 1 :(得分:1)

如果只有几千个条目,则线性扫描表可能不会比从服务器获取数据的开销慢。但是,该方法非常糟糕,如果行数增加,您的解决方案将变得非常缓慢,而使用查询的解决方案更加“可预测”。通常,让数据库执行它的意图:处理数据。

答案 2 :(得分:1)

1 - 批处理请求几乎总是更好。通过打开一千个查询来增加网络和连接开销。

答案 3 :(得分:0)

我希望1更快,如果数据足够少,它适合RAM,并且无论你的数据结构是什么'循环'都不比SQL服务器使用它的索引实现的效率低。

答案 4 :(得分:0)

我认为其他因素会影响到这个决定,例如:

  • 您是否在SQL上设置了缓存?
  • SQL是在同一服务器还是远程计算机上? (你必须考虑网络开销/速度问题)
  • 内存是一个问题,还是你在服务器上有自由的统治? (Web服务器是否有足够的内存来容纳数据表中的大量数据?)
  • 有多少人/程序正在访问SQL(更多人可能等于更慢的响应时间)
  • 它主要是读取或写入数据库(写入倾向于锁定表,可能必须等待获取数据,一次批量读取会比几次较小的读取更快)

例如,本地SQL服务器上的缓存数据可能与将所有内容加载到数据表中的速度一样快。但是,考虑到连接开销/网络延迟/必须从硬盘驱动器读取记录,远程计算机(缓存或未缓存)上的数据将会更慢。

答案 5 :(得分:0)

我正在处理一些类似的问题...我的解决方案是为每个报告规范化数据......坏消息是你需要后台进程来更新你的数据,但是我不需要处理关于内存和数据库连接的大量信息并没有那么多回忆......