У меня есть таблица, содержащая более 15 миллионов записей в Oracle. это своего рода таблица журнала, в которой есть столбец create_ts типа «дата». у меня есть простой «неуникальный» индекс типа на колонке созданных_ц.
У меня есть простой запрос диапазона:
select * from table1 where created_ts >= ? and created_ts <= ?;
когда я запускаю этот запрос из SQLPlus или SQL Developer и т. Д., Например:
select * from table1
where created_ts >= TO_DATE( '2009-11-10 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and created_ts <= TO_DATE( '2009-11-10 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
запрос возвращается в течение 1-2 секунд макс.
но когда я запускаю точно такой же запрос в java через JDBC и устанавливаю соответствующий "?" params используя объект java.sql.Timestamp. запрос занимает много времени. Анализируя процесс оракула, он идет на полное сканирование таблицы и не использует индекс.
драйвер jdbc, который я использую, ojdbc5 11.1.0.7.0
Может кто-нибудь, пожалуйста, помогите .. как правильно создать индекс, чтобы он использовал индекс.
Моя проблема была решена, когда я использовал объекты «oracle.sql.DATE» для установки переменных связывания вместо «java.sql.timestamp». Запрос использовал индекс и выполнялся практически в течение 1-2 секунд.
Спасибо всем, кто ответил и помог.
Но это проблематично для меня, так как это решение зависит от БД, и мое приложение получает соединение с БД и запросы в качестве параметров, а также загружает и обрабатывает данные в общем виде. Соединение с БД может быть любой СУБД, такой как oracle, mysql и т. Д.