SQL性能:一次检索多数据VS多次检索少数据

本文关键字:检索 多数据 VS 数据 性能 SQL 一次 | 更新日期: 2023-09-27 18:14:12

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

简单描述一下我的申请:

  1. 我有两个表SQL数据库与表名:GUIelements, DataTable.
  2. guelements表是一个非常小的50行表
  3. DataTable是一个非常大的表,大约有300000个条目
  4. 我也有一个c#应用程序,其中我有一个基于GUI元素中可用数据的动态生成GUI。
  5. c#应用程序有一个函数,它运行在一个独立于GUI的线程中,这个函数的目的是连续地(每1秒)监视GUI元素表,看看表中是否有变化。我通过每次打开连接、查询和关闭连接来做到这一点。

一切都很好,GUI更新,因为它应该,我也可以从GUI的主线程在数据库中查询。一切似乎都很完美。

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

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

My Questions is:

是否最好一次从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

哪种方法会更好?

是否存在由于多线程而导致某些查询失败的危险?

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

SQL性能:一次检索多数据VS多次检索少数据

如果您有足够的内存来存储整个数据,那么最好在一个连接中完成。避免多次网络往返。所以解决方案取决于你的实际尺寸。

但是如果你需要AVG,在数据库上做,而不是在你的应用程序中。