Вы не предоставляете достаточно информации для полного ответа, но вот несколько идей:
- вы можете использовать вместо этого идентификатор? Hibernate подготовит запросы для выбора по идентификатору, поэтому они будут (немного) быстрее, чем другие запросы
- правильно ли проиндексировано имя? Для этого запроса у него должен быть уникальный ключ (вы намекаете, вы ожидаете один результат). Конечно, такой индекс снижает производительность при вставке, обновлении и удалении.
- когда мы подходим к ссылкам, это зависит от того, что вы подразумеваете под производительностью: время до возвращения заявления? Тогда вам следует использовать ленивую загрузку. Это делает первое утверждение быстрее и, следовательно, быстрее. Конечно, у вас будет больше утверждений после того, как ссылки станут обезвоженными. В противном случае (некоторые) стремительная загрузка, вероятно, быстрее, хотя это сильно зависит от деталей.
- использовать кэширование, это может особенно помочь для ссылок, если они могут быть получены из кэша.
- настроить вашу базу данных. Дайте ему достаточно памяти, чтобы все время держать в памяти.
- настроить вашу сеть. При небольших запросах, подобных показанному, задержка может быть проблемой
- удалить сеть, поместив БД на тот же компьютер, что и код. Предполагая, что он достаточно большой.
Как видите, у вас есть множество вариантов настройки. Единственное, на что я рассчитываю получить хороший эффект от работы, - это рассмотреть индекс. Конечно, это может измениться, когда у нас будет больше информации о проблеме (например, полная структура таблицы, индексы, отображение гибернации, размер таблиц ...)
ОБНОВЛЕНИЕ на основе комментария:
При настройке первый вопрос: что нам нужно настроить?
Это преобразование критериев в оператор SQL? Если это так, то предоставление SQL-оператора напрямую может помочь.
Это фактическое выполнение оператора sql? В этом случае первым делом будет определение оператора sql, полученного из опубликованного кода.
Я никогда не видел реального случая, когда хранимая процедура делала вещи быстрее. Конечно, это не значит, что таких случаев не существует. Но оптимизаторы современных rdbms довольно умны.
Итак, чтобы начать все правильно: настройте ведение журнала так, чтобы вы видели каждый оператор sql с точной отметкой времени. А также время начала и окончания всего процесса, который вы настраиваете. Если речь идет о сотнях казней, вам придется агрегировать вещи.
Это скажет вам, выполняются ли операторы SQL и занимает ли это много времени и является ли это оператором SQL, который вызывает проблему.
Большую часть времени SQL-операторы виновны в плохой производительности, но не стоит спешить с выводами.
Обновление в части многих имен:
Вы можете использовать выражение InExpression: http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/criterion/InExpression.html, чтобы найти несколько объектов за один раз. Это будет быстрее, чем отдельные запросы.