python - Django 会自动创建索引吗?
问题描述
我正在开发一个使用 Postgresql 作为附加数据库的 Django 项目。我注意到一些查询花费了很长时间,甚至发现我在数据库中的许多不同字段上有十几个索引,其中一些我认为是不必要的。
我的计划是删除我不需要的那些,但我很想知道 Django 在创建模型时是否以“智能”方式执行此操作,或者是否有一些默认机制来创建我不知道的索引。
解决方案
Django 确实为某些字段自动创建索引。例如,它在Foreign Keys的文档中说明:
在ForeignKey上自动创建一个数据库索引。您可以通过将db_index设置为False来禁用此功能。
此外,当您设置unique
为True
字段时:
注意,当 unique 为 True 时,不需要指定 db_index,因为 unique 意味着创建索引。
同样在SlugField
:
意味着将 Field.db_index 设置为 True。
db_index
在字段级别上,您可以通过将参数传递给字段来控制字段是否具有索引。
您还可以indexes
在模型中指定选项Meta
:
class MyModel(model.Model):
...
class Meta:
indexes = [
models.Index(fields=['field1', 'field2'], name='some_idx'),
]
推荐阅读
- angular - 我无法使用 ngModel 更改值
- javascript - 输入类型“收音机”jQuery上的单击事件
- sql - 在 Postgresql 中对每月结果的多个日期进行分组
- r - 通过 for 循环将列添加到数据框中
- php - 计算“加权”平均值
- android - 如何在 Kotlin 中调用 Method?
- unit-testing - 默认失败测试(Intellij IDEA)
- android - CollapsingToolbar contentScrim 不工作
- asp.net-core - .NET Core 构建包含我不使用的 dll 文件 (Azure DevOps)
- c# - 在 Windows Server 2008 R2 上使用 IIS7.5 通过 TLS1.2 发出请求