我只知道索引很有用,而且查询速度更快。
以下两个有什么区别?
1. class Meta:
indexes = [
models.Index(fields=['last_name', 'first_name',]),
models.Index(fields=['-date_of_birth',]),
]
2. class Meta:
indexes = [
models.Index(fields=['first_name',]),
models.Index(fields=['last_name',]),
models.Index(fields=['-date_of_birth',]),
]
答案 0 :(得分:26)
第一个示例在last_name
和first_name
字段上创建一个索引。
indexes = [
models.Index(fields=['last_name', 'first_name',]),
]
如果您一起搜索姓氏和名字,或者自己搜索姓氏(因为last_name
是索引中的第一个字段),这将非常有用。
MyModel.objects.filter(last_name=last_name, first_name=first_name)
MyModel.objects.filter(last_name=last_name)
但是,它本身搜索first_name没有用处(因为first_name
不是索引中的第一个字段)。
MyModel.objects.filter(first_name=first_name)
第二个示例为first_name
字段创建索引,为last_name
字段创建单独的索引。
indexes = [
models.Index(fields=['first_name',]),
models.Index(fields=['last_name',]),
]
如果您根据代码中的名字或姓氏进行查找,这将非常有用
MyModel.objects.filter(first_name=search)
MyModel.objects.filter(last_name=search)
答案 1 :(得分:2)
Django模型索引在Django 1.11中引入
什么是Model.indexes:
默认情况下,为每列创建一个升序的索引。要为列定义具有降序的索引,请在字段名称前添加连字符。
对于您的查询,
models.Index(fields=['last_name', 'first_name','-date_of_birth',]),
将使用(last_name, first_name, date_of_birth DESC).
让我们转到您的问题,
你问了两个查询之间的区别,
两者都需要models.Index(fields=['-date_of_birth',]),
因为至少有一个会覆盖指定的变量。从你的问题来看,dateofbirth
至少会超越两行。
因此,根据文档的优选方法, 因为索引字段应该在单个列表中..所以django将从字段列表中准备SQL索引...
models.Index(fields=['last_name', 'first_name', '-date_of_birth']),