从Excel中查询SQL数据库的最快方法?

我将从Excel中添加一些可以让用户从Excel执行临时报告的function。

显而易见的方法是通过对ODBC数据源的SQL语句,但是恐怕不能很好地对比一个巨大的表(即:对包含50千兆字节数据的表进行SUM或COUNT操作会导致性能问题)

我一直在考虑使用某种caching技术,基本上在RAM数据中查询: http : //www.yellowfinbi.com/wp_inmemory.pdf这可能是昂贵的内存,我不太确定有多难执行尚未。

我的约束如下:

  • 我应该能够从Excel中查询任何types的数据源(SQL Server,MySql)

  • 临时报告将从Excel中执行(通过我的加载项)

  • 查询结果应该尽快发送回Excel单元格

  • 我不想构buildDatawarehouse或Olap多维数据集,而是查询数据源

任何有关algorithm,实现技术(In-Ram报告?)的build议,都可以从Excel中进行特别查询的最优化方法? (在优化的SQL代码旁边!)

PowerPivot是一个免费的Excel插件,可以用这种方式对数据进行汇总(求和/计数)。

它确实需要足够的RAM来caching来自服务器的数据。

“(即:对包含50 G数据的表进行SUM或COUNT将导致性能问题)”

这正是您可能不想在客户端caching数据的原因。 除非每个用户都有自己的64GB内存的小型超级计算机,否则需要减less行数。

事实是大多数用户发现一个大的报告是相当无用的。 我们的大脑在短期记忆中只能保持十几个值。 因此,用户不能从大量的数据中获得任何有用的东西。

他们需要执行分析,通常分析涉及汇总或过滤的数据

两种select你可以使用或组合使用:

1)实施预先汇总数据的视图。 许多数据库引擎都具有物化视图或SQL服务器中的无扩展选项,基本上可以预先汇总报告。 如果你想避免这种情况,并让你的插件来处理这个问题,那么你基本上是在build立一个OLAP引擎,并且应该看看OLAP系统使用的algorithm(这正是PowerPivot已经是的)。

这个想法是让数据库引擎做它擅长的事情,将行数减less到更接近客户需求的总量。 这可以确保您不会通过networking发送大量数据,并要求客户端以RAM方式处理该数据和caching。

2)将过滤标准与WHERE标准/ SP参数一起传递,以减less仅返回到绝对需要的行数。 在这里有真正的创造空间,比大多数人更容易实现。 例如,表中可能包含用户无法访问的某些数据,因此join授权表(或用于访问控制的任何机制)并过滤掉他无权访问的数据是有意义的。

要求用户selectfilter将数据过滤到合理的数量。

用户需要更多的数据比他们所能吞下的情况经常发生。