【发布时间】:2019-07-22 23:20:51
【问题描述】:
我正在尝试选择一些文档表列并将它们映射到新对象,而不是返回整个文档。我非常担心以下查询的执行时间,因为执行约 35,000 个条目需要约 4200 毫秒。减少执行时间的最佳解决方案是什么? 4 秒是 35,000 个条目的好时间吗?
@Query("SELECT DISTINCT new it.homepackage.models.document.DocumentGetReviewCommand(" +
"d.author.firstname, d.author.lastname, d.id, d.title, d.description, d.documentType.title, d.submissionDate)" +
" FROM Document d" +
" WHERE d.documentType IN :docTypes" +
" AND d.documentState = it.homepackage.enums.DocumentState.SUBMITTED" +
" AND :username <> d.author.username")
Page<DocumentGetReviewCommand> getDocumentsForReview(@Param(value = "username") String username,
Pageable pageable,
@Param(value = "docTypes") List<DocumentType> docTypes);
【问题讨论】:
-
获取真正的 SQL 查询,获取它的执行计划,看看可以改进它的地方。从您发布的内容中无法判断问题所在。
-
这不会改变一切,但为什么在这个查询中需要
DISTINCT?另外,:docTypes列表有多大? -
是的,你是对的。我在重构代码后忘记删除它。 :typeList 从 5 到 20 不等
标签: hibernate spring-boot jpql