从查询加载大数据的最快方法

时间:2019-07-12 07:45:53

标签: c# oracle11g datatable datareader dataadapter

我知道当我们谈论从数据库中获取数据时,关于快速到底有很多讨论。但是,我的问题仍然是,为了从DatagridView导出Excel工作表中的所有内容,我需要加载大量数据(在20.000行至500万行之间,具体取决于用户执行的条件)。

我知道我可以在DatagridView中设置查询的分页&我已经测试过了(可以很好且快速地工作),但是导出到Excel的最底层问题仍然存在,因此我需要获取所有内容。目前,我要做的是将数据加载到不同的线程中,以使UI在获取数据时不会冻结。

数据库中的查询已得到优化-不幸的是,这并不是一个简单的查询,因为它甚至使用带有联接的DB链接来生成最终结果集。但是从数据库的角度来看,我们别无选择。

我已经测试了所有我能想到的-使用DataAdapter.Fill&DataReader.Load方法,Datasets,DataTable甚至List 。我做了所有这些操作是为了查看性能之间的差异(速度与内存使用情况)。

结果实际上令我有些惊讶-所有人都在谈论DataReader.Load通过DataAdapter.Fill方法的加载速度,并通过DataTable填充List ,我得出的结论是,在我的情况下,所有语句均不适用完全符合它的预期:

1。)填充列表比填充DataTable慢,但内存消耗较低;

2。)DataReader.Load与DataAdapter.Fill几乎没有区别-有时是先获胜,有时不是,而且几秒钟之内就会出现差异。

无论如何,我尝试过的任何事情都没有产生预期的结果,因为大约200万行的数据大约在5分钟内被加载(在最佳情况下)。

在从速度方面填充数据时,有没有我能错过的所有超越这些方法的东西?也许有些缓存?

任何建议,谢谢!

P.S .:我会从一个简单的答案开始感到满意,这就是为什么我不包含任何代码的原因。

0 个答案:

没有答案