4

我有一个选择(没什么复杂的)

Select * from VIEW

这个视图有大约 6000 条记录和大约 40 列。它来自 Lotus Notes SQL 数据库。所以我的 ODBC 驱动是 LotusNotesSQL 驱动。该查询大约需要 30 秒才能执行。我工作的公司使用EXCEL运行查询并将所有内容写入工作表。由于我假设它会逐个单元格地写入所有内容,因此过去最多需要 30 到 40 分钟才能完成。

然后我使用了 MS 访问。我在 Access 上创建了一个副本本地表来存储数据。我的第一次尝试是

INSERT INTO COLUMNS OF LOCAL TABLE
FROM (SELECT * FROM VIEW)

请注意,这是伪代码。这运行成功,但又花费了 20 到 30 分钟。然后我使用 VBA 循环遍历数据并为每个单独的记录手动插入(使用 INSERT 语句)。这大约需要 10 到 15 分钟。这是我迄今为止最好的情况。

之后我需要做什么: 我有数据后,我需要按部门过滤它。问题是如果我在 SQL 查询中放置一个 where 子句(执行查询的时间从 30 秒跳到大约 10 分钟 + 写入本地表/excel 的时间)。我不知道为什么。可能是因为这些列都是文本列?

如果我们将某些列更改为整数,是否会使其在 where 子句方面更快?

我正在寻找有关如何解决此问题的建议。我的老板说我们可以采用一些基于 Java 的解决方案。这会有帮助吗?我不是 java 人,而是 ac#,也许我会说服他们也使用 c#,但我主要是在寻找有关如何减少时间的建议。我已经将它从 40 分钟缩短到 10 分钟,但希望它在 2 分钟以内。

回顾一下:

查询大约需要 30 秒才能执行

在 Excel/Access 中本地使用查询大约需要 15 - 40 分钟

需要不到 2 分钟

可以使用基于 java 的解决方案

您可能会建议其他解决方案而不是 java。

4

5 回答 5

2

您是否尝试过使用批量查询?本周早些时候我在使用 C# 时遇到了同样的问题;我必须插入大约 25000 条记录,大约需要 30 分钟。更改为批量插入将其缩短到大约 5 秒。

于 2010-06-18T13:07:55.060 回答
1

插入记录后,您是否对 Access 表进行了索引。这应该会使查询速度更快。

于 2010-06-18T13:35:11.190 回答
0

如果不支持使用批量插入或太麻烦,一个简单的解决方案可能是使用事务:因为大多数数据库都应该是原子安全的,所以每个插入都有一定的最小开销(这是一个巨大的简化,但任何)。通过将所有插入包装到单个事务中,您可以避免原子提交开销。

但是,要真正提高性能,您需要进行更多基准测试。特别是,是inserts 慢还是select ... from view?

于 2010-06-18T13:13:23.227 回答
0

尝试这样的事情:

SELECT * INTO NewTable FROM View
于 2010-06-18T13:21:07.220 回答
0

我对 Lotus Notes SQL 不太熟悉,但是由于很多很多原因,在文本列中包含整数这一事实听起来是个非常糟糕的主意。

  • 数据完整性:这些整数之一可能以“foo”结尾。那你怎么办?
  • 性能:通常,整数更小,更容易用于应用程序
  • 排序:对数字进行排序,您将得到 9、10、11、100。将这些数字排序为文本,您将得到 10、100、11、9

现在解决您的问题...我认为 Lotus Notes SQL 在幕后使用了 NotesSQL 数据库。我认为您可以自己在其中创建索引。您是否尝试过在 WHERE 子句中的列上创建索引?

于 2010-06-18T13:33:14.033 回答