У меня есть SQL-запрос (объединение), который выполняется очень быстро при запуске в Oracle SQL Developer (в миллисекундах), но супер-медленный (в минутах), когда тот же запрос вызывается из приложения ac # с использованием ODP.net.Вызов OracleDataAdapter.Fill (таблица данных) просто ждет оракула.Странно то, что ранее соединение было очень быстрым и в 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)
После некоторого исследования я понял, что единственным изменением было добавление существующегостолбец метки времени как часть первичного ключа для table_1 и table_2.
По сути, PK table_1 выглядит следующим образом (Col_TS был добавлен в PK):
Col1 (varchar2), Col2 (varchar2), Col3 (number), Col4 (number), Col_TS (timestamp)
И PK table_2 (Col_TS был добавленна ПК):
Col1 (varchar2), Col2 (varchar2), Col3 (number), Col_TS (timestamp)
Но дело в том, что я вообще не использую столбцы меток времени в своем соединении: я просто соединяю table_1 Col2 с table_2 Col2 и table_1 Col3 с table_3 Col3.Почему добавление метки времени как части PK влияет на вызов запроса из C #?
Дополнительные примечания: единственными индексами для обеих таблиц являются PK.Должен ли я добавить индекс для столбцов метки времени?Запуск Oracle 10g, .Net 4.
Любое понимание проблемы приветствуется.