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