在与同行讨论 N+1 以及不良数据库查询对性能的严重影响后,我访问了http://guides.rubyonrails.org/active_record_querying.html 。
活动记录(轨道):
clients = Client.includes(:address).limit(10)
如果客户端有地址,并且我打算在遍历客户端时访问它们,Rails 提供includes
了让它知道继续并将它们添加到查询中,这样一来就消除了 9 个查询。
姜戈:
https://github.com/lilspikey/django-batch-select提供批量查询支持。您是否知道其他库或技巧来实现 Rails 提供的上述功能,但不那么冗长(如在 rails 示例中,其中只有 19 个字符修复 N+1 并且非常清楚)?另外,批处理选择是否以相同的方式解决了这个问题,还是这两个不同的东西?
顺便说一句,我不是在问select_related
,尽管乍一看似乎是答案。我说的是address
有一个外键的情况client
。