Django通用外键 - 考虑SQL性能的好还是坏? [英] Django Generic Foreign keys - Good or Bad considering the SQL performance?

查看:212
本文介绍了Django通用外键 - 考虑SQL性能的好还是坏?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个模型 A ,其中包含一个通用的外键关系,其中有3个其他模型(把它们看作 B C D )。我知道我们不能使用 filter 或 get 或其他查询集操作的泛型外键的限制。因此,要实现这样的事情, A.objects.filter(generic_object__name =foo)我必须首先筛选B,C和D的对象作为查询集,迭代它们并使用通用的反向关系获取 A 对象作为列表(而不是queryset)。 b
$ b

我不确定如何影响数据库的SQL性能,因为查询不是直接的。



我需要使用通用的外键,所以请建议任何SQL改进,而不是重新设计模型。



使用Django 1.4.3和Postgres。

解决方案

我想引用David Cramer的一些词语:Disqus,Django commiter的开发者

< blockquote>

泛型关系很好。他们不慢,只是在你的代码库中管理起来比较困难。

我看到很多人告诉别人不使用泛型关系因为速度很慢,但从不知道速度如何慢。


I have a model A which contains a generic foreign key relation with limit choices to 3 other models(consider them as B, C and D) in the same app. And I know the limitations of generic foreign keys that we can't use filter or get or anyother queryset operations.

So to achieve something like this, A.objects.filter(generic_object__name="foo") I have to filter B, C and D's objects first as queryset, iterate over them and use the generic reverse relation to get the A objects as list(not queryset).

I'm not sure about how it'll affect the SQL performace on database as the querying is not direct.

PS: I need to use the generic foreignkeys, so please suggest for any SQL improvement rather than redesigning of models.

Using Django 1.4.3 and Postgres.

解决方案

I'd like to quote some words from David Cramer: developer of Disqus, Django commiter

Generic relations are fine. They are not slow, just more difficult to manage in your code base.

I saw many people tell others don't use generic relations because it's slow, but never tell how it's slow.

这篇关于Django通用外键 - 考虑SQL性能的好还是坏?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆