gpt4 book ai didi

django - 将 Django 模型/表拆分为两个模型/表是否有性能优势?

转载 作者:行者123 更新时间:2023-12-05 08:21:18 26 4
gpt4 key购买 nike

SO question 7531153 ,我询问了将 Django 模型一分为二的正确方法——使用 Django 的多表继承或显式定义 OneToOneField。

基于 Luke Sneeringer's评论,我很好奇将模型一分为二是否会提高性能。

我考虑将模型一分为二的原因是因为我有一些字段将始终完成,而其他字段通常为空(直到项目关闭)。

将通常为空的字段(例如 actual_completion_dateactual_project_costs)放入 Django 中的单独模型/表中是否可以提高性能?

分成两个模型

class Project(models.Model):
project_number = models.SlugField(max_length=5, blank=False,
primary_key=True)
budgeted_costs = models.DecimalField(max_digits=10, decimal_places=2)
submitted_on = models.DateField(auto_now_add=True)

class ProjectExtendedInformation(models.Model):
project = models.OneToOneField(CapExProject, primary_key=True)
actual_completion_date = models.DateField(blank=True, null=True)
actual_project_costs = models.DecimalField(max_digits=10, decimal_places=2,
blank=True, null=True)

最佳答案

实际上,恰恰相反。任何时候涉及多个表,都需要 SQL JOIN,这对于数据库来说执行起来比简单的 SELECT 查询慢。就性能而言,字段为空这一事实在某种程度上是没有意义的。

根据表的大小和列数,只选择您需要与之交互的字段子集可能会更快,但在 Django 中使用 only 这很容易方法:

Project.objects.only('project_number', 'budgeted_costs', 'submitted_on')

产生类似于:

SELECT ('project_number', 'budgeted_costs', 'submitted_on') FROM yourapp_project;

使用单独的模型(和表)只对模块化的目的有意义——这样你子类化 Project 来创建一个特定类型的项目,它需要额外的字段,但仍然需要所有的字段一个通用的项目

关于django - 将 Django 模型/表拆分为两个模型/表是否有性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com