【发布时间】:2017-05-25 09:45:22
【问题描述】:
我正在向一个大表添加一个 NULL 列,并且我想确保它在模型定义中设置了 db_index=True:
class MyLargeModel(Model):
new_field = IntegerField(null=True, default=None, db_index=True)
但对于实际索引,我想使用部分索引:
migrations.RunSQL("""
CREATE INDEX my_index
ON mylargemodel (new_field)
WHERE new_field IS NOT NULL
""")
但是,默认情况下,这意味着 Django 的迁移将创建一个索引(这将非常慢),然后我需要手动删除该索引并创建我自己的。
如何创建一个迁移来告诉 Django Migrations db_index=True 已设置,而无需在数据库中创建索引?
【问题讨论】:
-
创建自己的索引时为什么要设置
db_index=True? -
我想保留
db_index=True,以便未来的开发人员(以及未来的我)知道它已编入索引,而无需四处寻找去想知道发生了什么。我知道我可以添加评论……但我宁愿拥有显式属性。 -
您可能会发现 class based indexes 功能在即将推出的 Django 1.11 中很有用。