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

时间:2011-10-31 21:01:42

标签: sql excel optimization reporting

我将在Excel中构建一些可以启用的功能 让用户从Excel执行临时报告。

显而易见的方法是通过针对ODBC DataSource的SQL语句, 但是我担心它不会在一个巨大的表上很好地扩展(即:对包含50千兆字节数据的表执行SUM或COUNT会导致性能问题)

我一直在考虑使用某种缓存技术,并且基本上在RAM中查询 数据:http://www.yellowfinbi.com/wp_inmemory.pdf 这在RAM中可能是昂贵的,我不太确定它实现起来有多困难。

我的约束如下:

  • 我应该可以从Excel查询任何类型的数据源(SQL Server,MySql)

  • 临时报告将从Excel(通过我的插件)执行

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

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

有关算法,实现技术(In-Ram报告?)的任何建议,都有最优化的方式来执行Excel的临时查询? (在优化的SQL代码旁边!)

2 个答案:

答案 0 :(得分:2)

PowerPivot是一个选项,它是Excel的免费插件,可以通过这种方式优化聚合(求和/计数)数据。

它需要足够的RAM来缓存来自服务器的数据。

答案 1 :(得分:1)

“(即:针对包含50千兆位数据的表执行SUM或COUNT将导致性能问题)”

这正是您可能不希望在客户端缓存数据的原因。除非每个用户都有自己的小型超级计算机和64 GB的RAM,否则你需要减少遇到的行数。

事实上,大多数用户发现大型报告毫无用处。我们的大脑在短期记忆中只能保留不到十几个值。因此,用户无法从大量数据中获取任何有用的东西。

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

您可以使用或在组合中使用两个选项:

1)实现预聚合数据的视图。许多数据库引擎都具有物化视图或SQL服务器中的无扩展选项,基本上可以让您预先聚合报告。 如果你试图避免这种情况,并让你的插件处理这个,那么你基本上是在构建一个OLAP引擎,并且应该看看OLAP系统使用的算法(这正是PowerPivot已经有的)。

我们的想法是让数据库引擎做它擅长的事情,将行数减少到更接近客户需要的聚合量。这可确保您不会通过网络发送大量数据,并要求客户端处理该数据并在RAM中缓存。

2)使用WHERE标准/ SP参数传递过滤条件,以减少仅返回绝对需要的行数。这里有充分的创意空间,比大多数人重新调整。例如,您的表可能包含用户无权访问的某些数据,因此加入授权表(或您用于访问控制的任何机制)并过滤掉他无权访问的任何数据是有意义的。

要求用户选择过滤器以将数据过滤到合理的数量。

通常情况下,用户需要的数据量超出吞吐量。