cud*_*cos 13 python django django-orm django-1.11
Django 1.11提供了创建数据库索引的新方法.到目前为止,我们db_index=True
在每个领域都有:
# example 1
class Person(models.Model):
name = models.CharField(db_index=True)
age = models.IntegerField(db_index=True)
Run Code Online (Sandbox Code Playgroud)
现在我们已经models.Index
和可能indexes
在class Meta
块内声明- 甚至是index_together
.
那说我有两个疑问:
1.示例1中的代码是否与下面的示例2完全相同?
# example 2
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
indexes = [
models.Index(fields=['name']),
models.Index(fields=['age'])
]
Run Code Online (Sandbox Code Playgroud)
2. index
多个字段怎么样index_together
?下面的例子3和4做了完全相同的事情?
# example 3
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
indexes = [
models.Index(fields=['name', 'age'])
]
Run Code Online (Sandbox Code Playgroud)
# example 4
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
index_together = [['name', 'age']]
Run Code Online (Sandbox Code Playgroud)
1和2之间有什么不同,3和4之间的差异是什么?我错过了什么?非常感谢.
根据文档,您可以给索引命名,也可以为索引中的每个字段设置顺序(但并非同样支持所有DB)。但实际上,这样做的全部目的是带来额外的灵活性,以在支持的情况下定义其他类型的索引。
当前从Django 1.11开始,只有在使用Postgres时,您才可以定义GIN和BRIN索引(如果这符合您的需求)。(请参阅django.contrib.postgres.indexes,网址为https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)
能够按照您所描述的那样定义索引只是最常见的情况,除非您想使用上面命名的功能(命名索引或排序字段),否则可能可以像到目前为止一样使用索引(db_index和index_together)。
归档时间: |
|
查看次数: |
2153 次 |
最近记录: |