2010-12-08 255 views
1

我有一個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.

對此問題的任何深入瞭解都非常感謝。

回答

1

SQL Developer僅顯示前50條記錄(默認選項),您感興趣的數據集足夠大,可能會導致.Fill(數據集)更長的時間。 你能看到有多大是通過運行

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

這是幾千行。但是正如我所說的那樣,在添加時間戳作爲PK之前,速度很快,之後又很慢。 – cks 2010-12-08 15:24:43

0

我曾與慢OracleDataAdapter.Fill()運行的問題和更大的值設置爲OracleCommand.FetchSize幫助解決他們的數據集(至少減少執行的時間)。

See details here

相關問題