Django泛型关系的SQL索引
在Django模型中的GenericForeignKey上创建SQL索引是否可能/合理 我想在我的postgreSQL数据库中对大量(~100万)对象执行查找。我的查找基于相关模型上的GenericForeignkey,它实际上存储为两个字段:object_id(链接到的对象的pk)和content_type(表示链接到的对象类型的Django ContentType模型的FK) 在SQL术语中,这本质上是:Django泛型关系的SQL索引,django,django-models,indexing,django-postgresql,Django,Django Models,Indexing,Django Postgresql,在Django模型中的GenericForeignKey上创建SQL索引是否可能/合理 我想在我的postgreSQL数据库中对大量(~100万)对象执行查找。我的查找基于相关模型上的GenericForeignkey,它实际上存储为两个字段:object_id(链接到的对象的pk)和content_type(表示链接到的对象类型的Django ContentType模型的FK) 在SQL术语中,这本质上是: WHERE ("my_model"."content_type_id" = x AND
WHERE ("my_model"."content_type_id" = x AND "my_model"."object_id" = y)
object\u id
是一个非唯一字段-由于通用FK可以链接到多个模型,不同类型的对象可能具有相同的pk
我想知道是否可以通过在我的\u model.object\u id
上创建一个非唯一索引来加快查询时间。我对索引的了解是有限的,所以我可能没有正确理解它们的用法,但我知道Django会自动在正常的ForeignKey关系上创建索引,所以我假设存在相关的加速
有没有人有过为GenericForeignKey创建索引的经验?您是否发现由此带来的性能提升?非常感谢您提供的任何帮助或见解。您可以在中查看索引部分。请记住,您可以在事务中创建索引并轻松分析它们的性能。虽然我不能直接回答您的问题,但您可以自己做一些基准测试,检查表中已经存在哪些索引,解释当前查询,(您可以通过打印QuerySet.query获得此结果)更改数据架构(添加索引)并解释againNote查询,索引不必只在一列上;如果您有这样一个由两部分组成的键,您可能希望在两列之间都有一个索引。请注意,顺序可能会有所不同(索引
(内容类型id,对象id)
与索引(对象类型id,内容类型id)
)