我对学说很新,我对DQL性能有疑问。我在一家拥有相当大的数据库的公司工作,为了得到想要的数据,我必须用多个JOIN和WHERES来编写查询。
我的问题是:
是否可以编写“性能更好”的查询?示例查询将是:
SELECT u
FROM User u
JOIN u.tags t
JOIN u.profile p
JOIN p.picture pic
JOIN u.city c
WHERE p.Finished = 1
AND pic.Active = 1
AND u.created < :eDate
AND u.finished = :sDate
AND t = :tag1 OR t = :tag2
ORDER BY u.name ASC
这只是一个查询示例。有些更长,有更多的JOINS。
我用谷歌搜索了一下,但最好的我可以5 Doctrine ORM Performance Traps You Should Avoid
链接上的数字2表示您应该拆分查询并自己获取每个数据。有人可以解释一下上面这个例子会是什么样子吗?
还有什么我可以用查询来提升性能吗?
谢谢!
答案 0 :(得分:3)
这是一个极端的问题,不可能“正确”回答它。因此,当您关注Doctrine性能时,您应该这样做:
来自Doctrine的documentation:“ ORM工具主要不适合批量插入,更新或删除。每个RDBMS都有自己最有效的方法来处理此类操作 “
没有人能够告诉你“边缘”在哪里 - 所以你唯一能做的就是:监控!记录持续时间,内存使用情况等,并检查您是否有问题或遇到问题。此外,如果您面临问题,这将有助于您确定Doctrine是否属于您的问题。
我们确实使用的一个选项是避免过于复杂的连接而不是松散到很多性能(特别是使用Dotrine保湿对象)是使用单个查询并用这些结果填充我们的对象/关系。但是看到第1点和第2点并且通过使用这种方法,一定数量的学说的目的是矛盾的。
摘要:尝试一下,监控它 - 并且只有在遇到问题时:检查您可以专门解决问题的方法。
如果您对“真实”问题需要任何帮助,请回来。