Django ForeignKey 和 OneToOneField 之间的查询速度或区别是啥

Posted

技术标签:

【中文标题】Django ForeignKey 和 OneToOneField 之间的查询速度或区别是啥【英文标题】:What is query speed or difference between Django ForeignKey and OneToOneFieldDjango ForeignKey 和 OneToOneField 之间的查询速度或区别是什么 【发布时间】:2018-06-05 05:25:55 【问题描述】:

我看过这个:https://groups.google.com/forum/#!topic/django-users/VEDZtuND2XM

但在那个答案上,罗纳尔多说的是方便而不是查询速度。

ForeignKey(unique=true) 和 OneToOneField 之间是否存在速度或性能差异?

或者说使用 OneToOneField 比 ForeignKey(unique=true) 有什么其他优势吗?

【问题讨论】:

反向访问实例更直观:FK:rel_model_instance.related_name.get(),1to1:rel_model_instance.related_name 【参考方案1】:

一般的答案是否定的。但是如果你在反向关系上做一些一般的事情,会有一些性能差异:当你使用通过 OneToOneField 定义的反向关系时,你会得到一个模型实例,这与 ForeignKey 反向关系的 Manager 相反,因此总是有一个数据库命中- 这很昂贵。

【讨论】:

以上是关于Django ForeignKey 和 OneToOneField 之间的查询速度或区别是啥的主要内容,如果未能解决你的问题,请参考以下文章

Django、ForeignKey 关系和 Q 或

Django ORM:缓存和操作 ForeignKey 对象

Django 中的 OneToOne、ManyToMany 和 ForeignKey 字段有啥区别?

Django 如何使 ForeignKey 使用默认值?

django model中foreignKey的self怎么理解?

Django 通过 ForeignKey 反向查找