Python Django是否自动创建索引?

Python Django是否自动创建索引?,python,sql,django,database,postgresql,Python,Sql,Django,Database,Postgresql,我正在做一个Django项目,使用Postgresql作为附加数据库。我注意到有些查询花费了很长时间,甚至发现我在数据库中的许多不同字段上都有十几个索引,有些是我认为不必要的 我的计划是删除我不需要的索引,但我想知道Django在创建模型时是否以“智能”的方式这样做,或者是否有一些默认机制用于创建我不知道的索引。Django确实为某些字段自动创建索引。例如,文件中规定: 在外键上自动创建数据库索引。你 可以通过将db_index设置为False来禁用此功能 此外,在字段上设置为True时: 注意

我正在做一个Django项目,使用Postgresql作为附加数据库。我注意到有些查询花费了很长时间,甚至发现我在数据库中的许多不同字段上都有十几个索引,有些是我认为不必要的


我的计划是删除我不需要的索引,但我想知道Django在创建模型时是否以“智能”的方式这样做,或者是否有一些默认机制用于创建我不知道的索引。

Django确实为某些字段自动创建索引。例如,文件中规定:

外键上自动创建数据库索引。你 可以通过将db_index设置为False来禁用此功能

此外,在字段上设置为
True
时:

注意,如果unique为True,则不需要指定db_索引, 因为unique意味着创建索引

另一方面:

意味着将Field.db_index设置为True

在字段级别,可以通过将参数传递给字段来控制字段是否具有索引

您还可以在模型
Meta
中指定该选项:

class MyModel(model.Model):
    ...
    class Meta:
        indexes = [
            models.Index(fields=['field1', 'field2'], name='some_idx'),
        ]

为我数据库中的每个外键建立索引是最佳做法吗?@ThatcherThornberry,这完全取决于你的需要。如果您看到我链接的关于外键的文档,它还声明“如果您创建外键以实现一致性而不是联接,或者如果您将创建一个替代索引(如部分或多列索引),则可能希望避免索引的开销。”