使用JSONFields与纯SQL方法Django Postgres的效率

使用JSONFields与纯SQL方法Django Postgres的效率,django,postgresql,Django,Postgresql,我想知道在我的Postgres DB中使用JSONFields和纯SQL方法在效率上有什么不同 现在我知道我可以像这样查询JSonfield: MyModel.objects.filter(json__title="My title") MyModel.objects.filter(title="My title") 在纯SQL中,它将如下所示: MyModel.objects.filter(json__title="My title&quo

我想知道在我的Postgres DB中使用JSONFields和纯SQL方法在效率上有什么不同

现在我知道我可以像这样查询JSonfield:

MyModel.objects.filter(json__title="My title")
MyModel.objects.filter(title="My title")
在纯SQL中,它将如下所示:

MyModel.objects.filter(json__title="My title")
MyModel.objects.filter(title="My title")

这些在效率上是相等的吗?

每件事都有单独的列肯定更有效

JSONField
的优点是灵活性。您可以在其中存储任何需要的内容,并且不必更改数据库模式。但这是有代价的。例如,如果您有一个最多255个字符的
CharField
,那么将花费大量的时间和精力来创建一个可以针对该特定类型进行优化的数据库(对于其他类型也是如此)。然而,对于
JSONField
,它实际上可以是任何东西,因此很难为此优化查询(在实际数据库级别)


除非您有充分的理由使用JSON字段(即您需要这种级别的灵活性),否则最好为每个字段使用单独的列。除了性能之外,还有其他优势。您可以定义默认值,您可以确切地知道不同变量的类型,这将使使用它们进行整个堆的编程更容易,并避免大量错误。

感谢您的回复。这是有道理的。对于我的特定任务,我找到了一种使用纯SQL而不是JSON的方法,但是,它使用了许多表(几乎50个)。而不是一个带有JSON字段的表。使用JSON还会更有效吗?谢谢为什么需要这么多桌子?为什么不在一张表上有很多列呢?基本上,我正在构建一个Google Forms克隆,我能想到的支持不同类型问题(如输入框、多项选择、复选框等)的唯一方法是为每种类型创建一个表。因此,每种类型的问题我需要一张表,我有将近50张。这有意义吗?谢谢你,我认为这样会更有效率。更重要的是,我认为如果你把事情分开,而不是尝试用一个JSONField来模拟每一个可能发生的事情,这会容易得多。我明白了,你可以对每种型号都有特殊的方法。是否有很多表X可以让JSON更高效?还是SQL方法总是更好?