Excel电子表格列是否可以像普通数据库表列一样编入索引?

时间:2011-08-02 15:50:20

标签: database performance excel indexing

我有一位客户试图将75mb Excel电子表格用作数据库。他们无法将其转移到其他任何地方。我不知道索引Excel电子表格的方法,所以我想我会问。我做谷歌“索引Excel”,但我没有找到任何东西。 Excel中似乎有一个与数据库索引无关的“索引”功能(除非我读错了)。

编辑(附加信息):针对此电子表格编写了Crystal报表,它有40个,是40个子报表,所有这些都与同一个多标签电子表格相反。这很疯狂,但这就是他们设计的方式。这需要花费大量的时间来处理,如果数据被编入索引,它仍然会很慢,但速度会慢100倍。

2 个答案:

答案 0 :(得分:5)

您无法索引Excel电子表格。 Excel中的= INDEX()函数仅仅是获取单元格引用的一种方式,与“索引”无关,后者是任何RDBMS的定义特征。数据库管理系统昂贵且复杂是有原因的,其中之一是因为它们提供了组织数据以便快速检索和处理的能力。

然而,你真正的问题似乎更具政治性而非技术性!我不知道您可以使用哪种时间和资源,但我会看到您是否可以将此电子表格导入某种免费/廉价数据库(如SQL Server Express,甚至是Access),并将模拟报告演示给客户端。从你描述的内容来看,他们似乎真的不知道他们可以看到的那种表现与他们现在要处理的内容有什么关系。如果他们看到生成的常用报告比他们通常看到的报告快50倍,他们可能会改变他们对Excel的看法。

答案 1 :(得分:2)

帮助处理数据方面的一个选项是使用SSIS任务将电子表格数据每晚(或某个时间间隔)放入SQL表格中并根据该表格编写报告 - 用户仍然可以更新电子表格你可以利用报告的一些表现。

我认为你的更大问题是水晶的使用,有两个方面:

1:子报告将在每个细节行中运行一次,因此单个子报告可以运行数十次或数百次。即使他们处于最高级别(每页一个或一个基础),这些子报告的开销也很糟糕。

2:水晶引擎不是整理数据的最快方式(但这是对抗Excel工作表的唯一方法)。

关于这一点你可以做几件事,但它们都涉及一堆返工:

1:假设您可以使用我将数据传输到SQL的建议,编写存储过程以实际生成报告数据(分组,排序,过滤等),并使用Crystal来显示它(而不是拥有水晶引擎做的一切)。这应该会对每份报告的表现产生重大影响。

2:如果你有很多具有相同格式的报告(即4列数据和类似的图形),你可以将它们存储在1中的存储过程中,这样一个存储过程就会返回多个报告的数据。这减少了跳转次数和渲染的报告数量。例如,您的存储过程可以返回如下数据集:

ReportName    Col1Name    Col1Value    Col2Name    Col2Value
SubReport1    Name        Joe Bloggs   Orders      12
SubReport1    Name        Jane Bloggs  Orders      7
SubReport2    Product     Trousers     StockLevel  10
SubReport2    Product     Shirts       StockLevel  15

Crystal报表可以获取此数据集,并通过对ReportName列进行分组将其转换为子报表。这种技术可能会使报表特定格式更难应用,因此需要考虑这一点。

我过去曾使用这两种方法生成比它们所基于的报告快几个数量级的报告。