SQL性能:一次检索多数据VS多次检索少数据
本文关键字:检索 多数据 VS 数据 性能 SQL 一次 | 更新日期: 2023-09-27 18:14:12
我是SQL新手,所以如果我的问题看起来很幼稚,请原谅我。
简单描述一下我的申请:
- 我有两个表SQL数据库与表名:GUIelements, DataTable. guelements表是一个非常小的50行表
- DataTable是一个非常大的表,大约有300000个条目
- 我也有一个c#应用程序,其中我有一个基于GUI元素中可用数据的动态生成GUI。 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
哪种方法会更好?
是否存在由于多线程而导致某些查询失败的危险?
请记住,表格和列表的大小不是实际的,但我用这些数字作为例子
如果您有足够的内存来存储整个数据,那么最好在一个连接中完成。避免多次网络往返。所以解决方案取决于你的实际尺寸。
但是如果你需要AVG
,在数据库上做,而不是在你的应用程序中。