У меня есть таблица articles
с 500 тыс. Строк. В статье есть список авторов. Я пытаюсь создать запрос, чтобы получить последнюю опубликованную статью для списка авторов.Подзапрос из предложения с использованием HQL
Я использовал следующий HQL запрос, который получает меня, что я хочу, но работает довольно медленно (~ 4s)
select author, article
from Article article inner join article.authors author
where (author.id, article.publishedAt) in
(select author.id, max(article.publishedAt)
from Article article join article.authors author
where author.id in (authors_list))
group by author.id
Возможным лучше запрос в простой SQL будет:
select * from (
select articles.id, author.id
from articles, article_authors, authors
where articles.id = article_authors.article_id and
article_authors.author_id=authors.id
and author.id in (author_list)
order by articles.publishedAt desc
) b
group by authors.id;
, но из в документе Hibernate указано, что подзапросы HQL могут встречаться только в предложениях select или where. http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-subqueries
Есть ли способ подражать этому типу запросов с использованием HQL или другим способом повысить производительность запроса?
Я ответил на очень похожий вопрос пару месяцев назад. Должен вам помочь. http://stackoverflow.com/questions/32486923/how-to-increase-performance-in-sql-query/32487550#32487550 – jswan