SQL性能:一旦VS多次检索少量数据就检索很多数据

时间:2016-10-20 13:34:40

标签: c# sql multithreading

我是SQL新手,请原谅我,如果我的问题看起来很幼稚。

只是我的申请的简要说明:

  1. 我有一个带有表名的两个表SQL数据库:GUIelements,DataTable。
  2. GUIelements表是一个非常小的50行表
  3. DataTable是一个非常大的表,有300000个条目
  4. 我还有一个C#应用程序,我根据GUIelements中提供的数据动态生成GUI。
  5. C#应用程序具有在与GUI不同的线程中运行的功能,此功能的目的是连续(每1秒)监视GUIelements表以查看表中是否有更改。我每次打开连接,查询和关闭连接时都这样做。
  6. 一切正常,GUI应该更新,我也可以从GUI的主线程在数据库中进行查询。一切似乎都很完美。

    ==============================

    现在我想创建另一个函数,它将在另一个每10分钟运行一次的线程中再次运行。 这个函数的目的是检索DataTable的所有条目,一旦它将它们检索到本地列表,然后进行一些低级处理,比如获取数据的平均值。

    我的问题是:

    最好从sql数据库中检索整个DataTable一次,将其存储在临时列表中并进行处理:

    USING()    
    {    
     - OpenConnection
     - Query & Store data in a big 300000 elements list
     - Close Connection
     - Process list    
    }
    

    或者最好从数据包中检索DataTable中的数据,处理每个数据包然后请求下一个数据包。操作将如下所示:

    FOR LOOP 3 TIMES    
    USING()    
    {    
     - OpenConnection
     - Query & Store data in a small 100000 elements list
     - Close Connection
     - Process list    
    }    
    END
    

    哪种方法会更好?

    由于多线程,某些查询是否会出现故障?

    请记住表格和列表大小不是实际的,但我使用这些数字作为示例。

1 个答案:

答案 0 :(得分:1)

如果你有内存来存储整个数据,那么最好在一个连接中进行。避免多次网络往返。因此,解决方案取决于您的实际尺寸数字。

但如果您需要AVG,请在不在您应用中的数据库上执行此操作。