Java 如何优化jpa查询
我有一个查询,从mysql数据库获取数据需要花费更多的时间。数据库中只有很少的记录Java 如何优化jpa查询,java,mysql,sql,performance,jpa,Java,Mysql,Sql,Performance,Jpa,我有一个查询,从mysql数据库获取数据需要花费更多的时间。数据库中只有很少的记录 @Query(" SELECT COUNT(*) FROM Message n WHERE n.deleted = false AND n.sent = true AND n.senderEnvelope.user = ?1 AND n.replyToMessage IN ( SELECT DISTINCT m.replyTo
@Query(" SELECT COUNT(*)
FROM Message n
WHERE n.deleted = false
AND n.sent = true
AND n.senderEnvelope.user = ?1
AND n.replyToMessage IN (
SELECT DISTINCT m.replyToMessage
FROM Message m , Relationship r
WHERE m.deleted = false
AND m.sent = true
AND m.senderEnvelope.user = ?1
AND ?2 MEMBER OF r.categories
)
")
Long countUniqueRepliesSentByUser(User currentUser ,
RecommendationCategory recommendationCategory);
是否有一种方法可以优化此查询或以其他方式更正它。
请帮忙。提前感谢最大的问题是没有为这两个表指定关系:
FROM Message m , Relationship r
这将导致代价高昂的“交叉连接”
这似乎是一个语法错误;这是什么意思??:
AND ?2 MEMBER OF r.categories
解决这些问题后,请在中处理<(选择不同…)中的代码>优化效果不佳。此外,不同的
在某种程度上是冗余的。考虑将其改为
EXISTS ( SELECT 1 FROM ...
AND n.replyToMessage = m.replyToMessage )
请为您询问的任何查询提供EXPLAIN SELECT…
。您能否在数据库中执行相应的SQL语句并检查其性能是否良好,其次检查与数据库的连接是否良好?否,它在数据库上的执行也不良好。是的,到数据库的连接很好。您可以发布您的实体(消息和关系)吗?因此,如果SQL查询(您没有发布)执行得“糟糕”,那么您首先要遵循关于如何优化SQL查询的正常规则,然后在完成后再返回JPQL!这里没有什么特别的