3

我目前正在开发一个将旧数据库转换为新样式的程序,我被分配的任务之一是删除一些旧的二进制列并将它们转换为我们存储库中的文档。

表中有大约 110 万行,我的过程大约需要 12 小时才能完成。

我正在寻找使这一切变得更快的方法,而我正在研究的一件事是更快地获取数据。如果有办法在查询完成之前获得查询结果?我注意到,当我在查询分析器中对该表运行“select *”语句时,我会立即开始返回结果,但是当我在 .NET 中使用 ExecuteReader 时,该查询似乎需要大约 30 分钟才能开始读取行.

4

2 回答 2

1

使用它可能会有所帮助command.ExecuteReader(CommandBehavior.SequentialAccess)。但是,这样做需要您按顺序读取列,并且需要您以不同的方式读取二进制值。我建议阅读有关 SequentialAccess 的文档,以便了解可能需要对代码进行哪些其他更改。

考虑到相同的查询在查询分析器中立即运行。这告诉我查询本身并不需要 30 分钟才能返回第一个结果,或者它会在查询分析器中这样做。我认为对大二进制值的处理可能是对这种差异的解释。一种快速的测试方法是更改​​查询以选择除二进制列之外的所有内容,并查看这是否会更改 ExecuteReader 花费的时间。如果没有二进制列的执行时间相同,那么 SequentialAccess 不太可能有帮助。如果没有二进制列更快,那么 SequentialAccess 可能值得使用。

于 2011-01-12T23:44:03.157 回答
0

如果您不需要查询中的所有列,则有一点建议是不要使用 select *。也许这个问题也会有所帮助:性能优化策略的最后手段

于 2011-01-12T23:42:40.100 回答