【发布时间】:2016-04-08 10:17:43
【问题描述】:
我有一个程序的一部分,它必须根据不同的查询显示来自多个表的数据。到目前为止,它看起来像这样:(请记住,每个后续 SELECT 都基于我们从 A 获得的东西)
SELECT * FROM TABLE A WHERE ID = ...
SELECT [8 fields] FROM TABLE B WHERE ...
SELECT [5 fields] FROM TABLE C WHERE ...
SELECT [1 field] FROM TABLE D WHERE ...
SELECT [1 field] FROM TABLE E WHERE ...
SELECT [1 field] FROM TABLE F WHERE ...
SELECT [1 field] FROM TABLE G WHERE ...
SELECT [1 field] FROM TABLE H WHERE ...
SELECT [2 fields] FROM TABLE I WHERE ...
之后,我获取结果并创建不同的对象或将它们放入不同的字段中。 问题是,在单击按钮和显示窗口之间,我有大约 2 秒的延迟。 请记住,这是一个非常大的数据库,有数百万条记录。不幸的是,更改数据库是不可能的。 我只通过主键搜索,我无法限制搜索更多。
连接从一开始就打开,我不会在每个语句之后关闭/重新打开它。 仅加入表 A 和表 B 比两个不同的选择要长得多,最多 1.5 秒,而运行顺序选择则下降到大约 300 毫秒。 考虑到第一个查询在 DBMS 中执行的时间约为 53 毫秒,我仍然觉得这需要相当长的时间。
我在 C#,Net Framework 4 中使用 ODBC 驱动程序。数据库本身是一个 DB2,但是,使用 DB2 本机驱动程序给我们带来了很多问题,IBM 对此帮助不大。
另外,当我只选择几个字段时,我只使用这些字段创建所需的对象,其余的保持默认。
有什么办法可以改进吗? 先感谢您, 安德烈
编辑:诊断工具说明了以下内容:
--Two queries in another part of the program, we can ignore these, as they are not usually there-- 0.31 s
First query - 0.75 s
Second query - 0.87s
Third query - 0.95s
Fourth query - 0.99s
Fifth query - 1.00s
Sixth query - 1.04s
Seventh query - 1.08s
Eighth query - 1.10s
Ninth query - 1.12s
Program output - 1.81s
【问题讨论】:
-
当您说更改数据库是不可能的,我假设您的意思是修改表结构。你能创建新的索引吗?
-
@Brad,不幸的是,我们无法以任何方式更改数据库,因为同一产品的旧版本也在数据库上运行,并且期望一切都保持原样。一般来说,那些没有重复的字段被添加为主键。