我目前正在开发一个程序,它将旧的数据库转换为较新的样式,分配给我的任务之一是删除一些旧的二进制列并将其转换为我们存储库中的文档。
表中有大约110万行,我的过程大约需要12个小时才能完成。
我正在寻找使这一切变得更快的方法,而我正在寻找的一件事就是更快地获取数据。如果有办法可以在查询完成之前获得查询结果?我注意到,当我在查询分析器中对该表运行“select *”语句时,我立即开始获取结果,但是当我在.NET中使用ExecuteReader时,该查询似乎需要大约30分钟才能开始读取行。
最佳答案
使用command.ExecuteReader(CommandBehavior.SequentialAccess)
可能会有所帮助。但是,这样做需要您按顺序读取列,并且需要以其他方式读取二进制值。我建议使用reading the documentation on SequentialAccess,以便您知道可能需要对代码进行哪些其他更改。
考虑到同一查询在查询分析器中立即运行。这告诉我查询本质上不需要30分钟才能返回第一个结果,或者可以在Query Analyzer中返回。我认为处理大型二进制值可能是造成此差异的原因。一种快速的测试方法是更改查询以选择除二进制列之外的所有内容,然后查看这是否会更改ExecuteReader花费的时间。如果没有二进制列的执行时间相同,则SequentialAccess不太可能提供帮助。如果没有二进制列会更快,那么SequentialAccess可能值得使用。
关于.net - .NET-查询完成之前开始从DataReader读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675276/