我有一个查询,要花更多时间从mysql db获取数据。数据库中只有很少的记录
@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);
有没有一种方法可以优化此查询或以其他方式对其进行纠正。 请帮忙。预先感谢
答案 0 :(得分:0)
最大的问题是,这两个表没有指定关系:
FROM Message m , Relationship r
这会导致代价高昂的“交叉连接”。
这似乎是语法错误;它应该是什么意思??:
AND ?2 MEMBER OF r.categories
修复这些问题后,再处理IN
。 IN ( SELECT DISTINCT ... )
的优化不佳。此外,DISTINCT
在某种程度上是多余的。考虑将其更改为
EXISTS ( SELECT 1 FROM ...
AND n.replyToMessage = m.replyToMessage )
对于您要查询的任何查询,请提供EXPLAIN SELECT ...
。