我有一个选择(没有复杂的)
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。
答案 0 :(得分:2)
您是否尝试过使用批量查询?本周早些时候我用C#遇到了同样的问题;我不得不插入约25000条记录,大约需要30分钟。更换为批量插入物会将其缩短至约5秒钟。
答案 1 :(得分:1)
是否在插入记录后索引了Access表。这应该使查询更快。
答案 2 :(得分:0)
如果不支持使用批量插入或太麻烦,一个简单的解决方案可能是使用事务: 因为大多数DB应该是原子安全的,所以每个插入都带有一定的最小开销(这是一个很大的简化,但无论如何)。通过将所有插入包装到单个事务中,可以避免原子提交开销。
但是,要真正提高性能,您需要进行更多基准测试。特别是insert
s慢,还是select ... from view
?
答案 3 :(得分:0)
尝试这样的事情:
SELECT * INTO NewTable FROM View
答案 4 :(得分:0)
我对Lotus Notes SQL并不太熟悉,但是由于很多很多原因,你在文本列中使用整数的事实听起来很糟糕。
现在问题......我认为在幕后Lotus Notes SQL使用NotesSQL数据库。我认为你可以自己创建索引。您是否尝试在WHERE子句中的列上创建索引?