Поддерживает ли OJDBC подсказки Oracle в подготовленных выражениях

1

У меня есть такой запрос:

String sql = "DELETE FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
PreparedStatement statement = connection.prepareStatement(sql);
statement.setObject(1, ...timestamp_value..., ...timestamp_type...);
boolean result = statement.execute();
...
statement.close();

Таким образом, я выполняю в основном SQL:

  DELETE
  FROM
    mytable 
  WHERE
    modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
    AND ROWNUM <= 10000;

Этот запрос выполняется очень медленно, потому что он не использует существующий комбинированный индекс над временем изменения и двумя другими столбцами. Вместо этого он выполняет полное сканирование таблицы. Если я заставляю использовать указанный индекс с подсказкой, как показано ниже, все выполняется гладко.

  DELETE /*+ index(mytable PK_MYTABLE) */
  FROM
    mytable 
  WHERE
    modificationTime < to_date('2014-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
    AND ROWNUM <= 10000;

Мой вопрос: работает ли это над OJDBC? Могу ли я просто изменить код на:

String sql = "DELETE /*+ index(mytable PK_MYTABLE) */ FROM " + table.getName().quoted() + " WHERE modificationTime < ? AND ROWNUM < " + (objectsPerCommit + 1);
...

и все работает так, как ожидалось? Или OJDBC каким-то образом отбросит комментарий/подсказку?

  • 3
    Просто попробуйте - в чем проблема?
  • 2
    Я думаю, что ОП хочет знать, будет ли он работать на самом деле или будет отклонен подготовленным заявлением в качестве простого комментария.
Показать ещё 1 комментарий
Теги:
prepared-statement
ojdbc

1 ответ

1

Да, конечно. Подсказки поддерживаются> http://docs.oracle.com/cd/E11882_01/java.112/e16548/instclnt.htm#JJDBC28224

  • 0
    Обратите внимание, что связанная статья относится к драйверам JDBC OCI, а не к драйверам JDBC THIN.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню