如果我一次又一次地查询SQL Server 2005和2000,这是一个问题吗?

时间:2010-06-08 14:15:46

标签: c# sql-server

我正在构建的窗口应用程序适用于非常低端的机器(Celeron最大128 RAM)。从以下两种方法中哪一种是最好的(我不希望该应用程序成为低端机器的内存耗费): -

方法一: -

查询数据库Select GUID from Table1 where DateTime <= @givendate,它返回了超过300,000条记录(但只有一个字段,即GUID - 300,000个GUID)。现在运行一个循环来实现基于GUID的该软件的下一个过程。

第二种方法: -

一次又一次地用前1个查询数据库Select Top 1 GUID from Table1 where DateTime <= @givendate,直到完成所有30万条记录。它一次只返回一个GUID,我可以进行下一步操作。

你有什么建议哪种方法会使用较少的内存资源? (速度/性能不是问题)。

PS:数据库也在本地机器上(MSDE或2005快递版)

6 个答案:

答案 0 :(得分:2)

我会采用混合方法。我会一次选择50条记录而不是一条。这样,您不会加载整个记录数,但是您也大大减少了对数据库的调用次数。

答案 1 :(得分:0)

如果你只有128 MB的ram我认为2号将是你最好的方法......那说你不能用存储过程做这个SET based,这样所有的处理将在服务器上发生

答案 2 :(得分:0)

如果考虑使用内存,我会考虑在本地将数据缓存到磁盘。然后,您可以使用FileStream对象从文件中读取数据。

你的2号解决方案会非常慢,并且会给数据库服务器带来很多负担。

答案 3 :(得分:0)

我会启用分页启用存储过程。

我会在1k行的大块中进行测试并从那里开始测试,直到我获得最佳性能。

usp_GetGUIDS @from = 1, @to = 1000

答案 4 :(得分:0)

使用方法1并使用SQLDataReader迭代数据而不会占用内存。

答案 5 :(得分:0)

对于您来说,这可能是一种完全不合理的方法,但如果您担心性能而机器规格较低,我会尝试以下方法:

  1. 将您的SQL服务器移动到另一台计算机,因为这会占用大量资源。
  2. 另外,如果你没有那么多记录,可以存储为XML或SQLite,并完全摆脱SQL服务器?