代码之家  ›  专栏  ›  技术社区  ›  Laplace

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

  •  2
  • Laplace  · 技术社区  · 14 年前

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

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

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

    6 回复  |  直到 14 年前
        1
  •  1
  •   StingyJack    14 年前

        2
  •  2
  •   tster    14 年前

    如果没有更多的信息,我会说选项1。你可以执行 发射光学弹道系统 在往返数据库和下载结果集所需的时间内,CPU操作的数量。另外,我假设编写C逻辑比编写T-SQL逻辑更容易。但是,如果您谈论的是set查询,那么SQL可能更容易编写。最后,我会做任何更容易写的事情,如果写得太慢的话,我会修改它。

    顺便问一下,我们在这里谈多少问题?5, 10, 100? 如果是5个查询,那么时间不会太长,但是如果您对每个记录执行一个查询,并且可以有很多记录,那么 从未

        3
  •  1
  •   Janick Bernet    14 年前

    如果只有几千个条目,线性扫描表可能不会比从服务器获取数据的开销慢。但是,这种方法的伸缩性非常差,如果行数增加,您的解决方案将很快变得非常慢,因此使用查询的解决方案更具有“可预测性”。一般来说,让数据库执行它的任务:处理数据。

        4
  •  0
  •   ChrisW    14 年前

    如果RAM中容纳的数据足够少,而且无论数据结构是什么,如果“一系列循环”的效率不低于SQL服务器使用其索引可能实现的效率,那么我希望1会更快。

        5
  •  0
  •   Tommy    14 年前

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

    • SQL是在同一台服务器上还是在远程计算机上(您是否必须考虑网络开销/速度问题)
    • 有多少人/程序正在访问SQL(更多的人可能等于较慢的响应时间)
    • 它主要是读还是写数据库(写往往会锁定表,可能需要等待获取数据,一次大容量读取比几次较小的读取要快)

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

        6
  •  0
  •   a52    14 年前

    我在处理一些类似的问题。。。我的解决方案是规范化每个报表的数据。。。坏消息是,你需要一个后台进程来更新你的数据,但是这样我就不需要处理太多关于内存的信息,数据库连接也不需要太多回忆了。。