我正在开发一个将旧数据库转换为更新样式的程序,我分配的任务之一是删除一些旧的二进制列并将它们转换为我们存储库中的文档。
我们在表格中有大约110万行,我的过程大约需要12个小时才能完成。
我正在寻找方法让这一切变得更快,而我正在关注的一件事是更快地获取数据。如果有办法,我可以在完成之前查看查询结果?我注意到当我在查询分析器中对此表运行“select *”语句时,我立即开始获取结果,但是当我在.NET中使用ExecuteReader时,查询似乎需要大约30分钟才能开始读取行
答案 0 :(得分:1)
使用command.ExecuteReader(CommandBehavior.SequentialAccess)
可能有所帮助。但是,这样做需要您按顺序读取列,并要求您以不同的方式读取二进制值。我建议您reading the documentation on SequentialAccess,以便了解您的代码可能需要进行哪些其他更改。
考虑在查询分析器中立即运行相同的查询。这告诉我,查询本身并不需要30分钟才能返回第一个结果,或者它会在查询分析器中执行此操作。我认为处理大二进制值可能是这种差异的解释。一种快速测试方法是更改查询以选择除二进制列之外的所有内容,并查看是否更改了ExecuteReader所用的时间。如果没有二进制列的执行时间相同,则SequentialAccess不太可能有所帮助。如果没有二进制列,它会更快,那么SequentialAccess可能值得使用。
答案 1 :(得分:0)
如果您不需要查询中的所有列,则有一点建议是不要使用select *。也许这个问题也有帮助:Performance optimization strategies of last resort