C# oracle sql developer中的快速联接查询,odp.net中的超慢速联接查询

C# oracle sql developer中的快速联接查询,odp.net中的超慢速联接查询,c#,oracle,odp.net,C#,Oracle,Odp.net,我有一个sql查询(连接),在Oracle sql Developer上运行时速度非常快(毫秒),但在使用ODP.net从c#应用程序调用同一查询时速度非常慢(分钟)。对OracleDataAdapter.Fill(数据表)的调用只等待oracle。 奇怪的是,以前的连接在c#中也是非常快的 查询: select t1.col2, t1.col3 from table_1 t1 where exists (select t2.col2, t2.col3 from table_2 t2 where

我有一个sql查询(连接),在Oracle sql Developer上运行时速度非常快(毫秒),但在使用ODP.net从c#应用程序调用同一查询时速度非常慢(分钟)。对OracleDataAdapter.Fill(数据表)的调用只等待oracle。 奇怪的是,以前的连接在c#中也是非常快的

查询:

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)
经过一些调查,我意识到唯一的改变是添加了一个现有的timestamp列作为表1和表2的主键的一部分

表1的PK基本上如下所示(列被添加到PK中):

和表2的PK(PK中添加了列):

但问题是,我根本没有在联接中使用时间戳列:我只是将表1 Col2联接到表2 Col2,将表1 Col3联接到表3 Col3。为什么作为PK的一部分添加时间戳会影响来自C#的查询调用

附加说明:这两个表的唯一索引是PKs。我应该为时间戳列添加索引吗?运行Oracle 10g、.Net 4


非常感谢对该问题的深入了解。

SQL Developer仅显示前50条记录(默认选项),并且您感兴趣的数据集足够大,这可能是.Fill(数据集)需要更长时间的原因。 通过运行

select count(1) from table_2 t2 where t1.col2 = t2.col2 and t1.col3 = t2.col3)

SQL Developer仅显示前50条记录(默认选项),并且您感兴趣的数据集足够大,这可能导致.Fill(数据集)的时间更长。 通过运行

select count(1) from table_2 t2 where t1.col2 = t2.col2 and t1.col3 = t2.col3)

我遇到了运行缓慢的OracleDataAdapter.Fill()和将较大的值设置为OracleCommand的问题。FetchSize有助于解决这些问题(至少减少了执行时间)


.

我在运行缓慢的
OracleDataAdapter.Fill()
并将较大的值设置为
OracleCommand时遇到问题。FetchSize
有助于解决这些问题(至少减少了执行时间)


.

有几千行。但是正如我所说的,在添加时间戳作为PK之前是快的,之后是慢的。但是在SQL Developer中,如果你把整个数据集都放回去,那么它是快的吗?它只有几千行。但是正如我所说的,在添加时间戳作为PK之前是快的,之后是慢的。但是,如果你把整个数据集都放回去,在sqldeveloper中是快的吗?
select count(1) from table_2 t2 where t1.col2 = t2.col2 and t1.col3 = t2.col3)