我在MS SQL 2005中有一个带有primarykey的表,它有几十万个记录。当我在Management studio中查询它以获取记录时,它会带来非常快的但当我使用下面的代码找到它时,它需要很多秒。我必须使用数据集,因为我需要更新行。我该如何改善表现?
objData . ProcName ="myProcName"
objData . CreateCommand()
objData . Parameters("@BName", SqlDbType. VarChar, 20, "MyBranch1")
SqlDataAdapter da = objData . createAdapter()
da . Fill(ds,"MyTable1")
虽然proc代码很简单:
select * from MyTable1 Where BranchName = @BName
这个数据集将以相同的方式打开5个表,因此总时间超过一分钟
答案 0 :(得分:2)
您应该考虑使用datareader而不是数据集,并使用sqlcommand进行手动更新。
你还应该考虑通过提供额外的标准来限制你提取的记录数
答案 1 :(得分:1)
我已经看到使用SQLDataAdapter的非常类似的延迟行为,这需要花费很多秒才能返回响应,而不是在SQL Server Mgmt Studio中运行完全相同的过程(在同一客户端计算机上),它立即返回响应。
我在受影响的表上重建了索引,然后SQLDataAdapter的响应是瞬时的。
我从未见过使用SQLDataReader的这种延迟行为。我经常使用SQLDataReader,只做一个MyTable.Load(MySQLDataReader)。它似乎比SQLDataAdapter具有更少的开销。