【发布时间】:2010-06-18 13:05:43
【问题描述】:
我有一个选择(没什么复杂的)
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 人,而是 c#,也许我会说服他们也使用 c#,但我主要是在寻找有关如何减少时间的建议。我已经将它从 40 分钟缩短到 10 分钟,但希望它在 2 分钟以内。
简单回顾一下:
查询大约需要 30 秒才能执行
在 Excel/Access 中本地使用查询大约需要 15 - 40 分钟
需要在 2 分钟内完成
可以使用基于 java 的解决方案
您可以建议其他解决方案而不是 java。
【问题讨论】:
-
仅供参考 切勿选择 * 这对性能不利,您应该只选择您需要的列。
-
嗯,整个语句是选择..所有列..他们想要这些数据,我该怎么办?我只是一个棋子。 :P
-
什么时候需要30秒,什么时候需要15分钟?我很困惑。
-
运行查询需要 30 秒。我在临时本地表中获取数据(使用访问或 ms 查询编辑器)。然后我需要将所有数据写入磁盘。在 excel 中(在逐个单元格的情况下减慢速度)或在访问本地表中。
-
@masfenix - 列出列而不是 SELECT *。我认为这是 David 的观点,尽管 IMO 不是出于性能原因,而是简单的编程 - 如果基础表发生更改,SELECT * 将破坏大多数应用程序。
标签: sql performance sqlperformance