我有一个SQL查询(一个连接),它在Oracle SQL Developer(毫秒)上运行时速度超快,而在相同查询时速度超慢(分钟)从使用ODP.net的ac#应用程序调用。对OracleDataAdapter.Fill(数据表)的调用只是等待oracle。 奇怪的是之前的连接在c#中也是超快的。在oracle sql developer中加入查询速度很快,在odp.net中速度很慢
查询:
select t1.col2, t1.col3 from table_1 t1 where exists (select t2.col2, t2.col3 from table_2 t2 where t1.col2 = t2.col2 and t1.col3 = t2.col3)
经过一番调查后,我意识到做出的唯一改变是增加了现有的时间戳列作为两个TABLE_1和TABLE_2主键的一部分。
基本上TABLE_1的PK看起来像这样(Col_TS加入PK):
Col1 (varchar2), Col2 (varchar2), Col3 (number), Col4 (number), Col_TS (timestamp)
而且TABLE_2的PK(Col_TS加入PK):
Col1 (varchar2), Col2 (varchar2), Col3 (number), Col_TS (timestamp)
但事实是,我根本没有在我的连接中使用timestamp列:我只是将table_1 Col2连接到table_2 Col2和table_1 Col3连接到table_3 Col3。为什么添加时间戳作为PK的一部分会影响来自C#的查询调用?
其他注意事项:两个表的唯一索引是PK。我应该为时间戳列添加一个索引吗?运行Oracle 10g,.Net 4.
对此问题的任何深入了解都非常感谢。
这是几千行。但是正如我所说的那样,在添加时间戳作为PK之前,速度很快,之后又很慢。 – cks 2010-12-08 15:24:43