DCookie, OMG и APC получают +1 за свои ответы. Я был на стороне администратора приложений Hibernate и, как сказал Том Кайт, нет параметра «fast = true», который мог бы использовать неэффективный SQL и заставить его работать быстрее. Время от времени мне удавалось захватить проблемный запрос Hibernate и использовать анализатор Oracle SQL для создания профиля SQL для этого оператора, который повышает производительность. Этот профиль представляет собой набор подсказок, которые «перехватывают» генерацию плана выполнения оптимизатором и вынуждают его (без изменений в приложении) к лучшему, который по какой-то причине обычно игнорируется оптимизатором. Тем не менее, эти выводы являются скорее исключением, чем правилом для неэффективного SQL.
Одна вещь, которую вы можете сделать как разработчик, который, по-видимому, понимает данные лучше, чем уровень ORM, - это написание эффективных представлений для решения конкретных проблем запросов и представления этих представлений в Hibernate.
Особая проблема, на которую следует обратить внимание, - это столбцы Oracle DATE (не TIMESTAMP), которые попадают в сгенерированные Hibernate запросы и сравниваются с переменными связывания в предложении WHERE - несовпадение типов с типами данных Java timestamp предотвратит использование индексов по этим столбцам.