6

我在 MS SQL 2005 中有一个带有主键的表,它有几十万条记录。当我在 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 个表,因此总时间超过一分钟

4

2 回答 2

2

您应该考虑使用 datareader 而不是 dataset 并使用 sqlcommand 进行手动更新。

您还应该考虑通过可能提供其他标准来限制您获取的记录数量

于 2012-01-04T14:55:04.977 回答
1

我已经看到使用 SQLDataAdapter 的延迟行为非常相似,它需要几秒钟才能返回响应,而在 SQL Server Mgmt Studio(在同一台客户端计算机上)中运行完全相同的过程会立即返回响应。

我在受影响的表上重建了索引,然后来自 SQLDataAdapter 的响应是即时的。

我从未见过 SQLDataReader 出现这种延迟行为。我经常使用 SQLDataReader,只做一个 MyTable.Load(MySQLDataReader)。它的开销似乎比 SQLDataAdapter 少。

于 2012-12-19T19:19:12.147 回答