在使用index_together Meta属性定义模型时,列的顺序是否重要?
换句话说,
之间是否存在差异Class myModel(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=100)
favorite_color = models.CharField(max_length=20)
class Meta:
index_together = ('name', 'address', 'favorite_color')
VS
Class myModel(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=100)
favorite_color = models.CharField(max_length=20)
class Meta:
index_together = ('favorite_color', 'name', 'address')
我只是问,因为我注意到在查看表的结构时,键中的每一列都有一个“key in key”属性。 MySQL / PostgreSQL是否希望按顺序查询列?
除此之外,将列一起索引与单独索引之间是否存在很大差异?
答案 0 :(得分:9)
index_together的顺序解释了创建索引的“路径”。 您可以从左向右查询以从索引中获利。
首先使用您的第一个index_together
:
index_together = ('name', 'address', 'favorite_color')
如果您的第一个过滤器是name
,则使用索引。如果第一个是name
而第二个是address
,则也使用索引。
但是,如果您按address
然后name
或address
,favorite_color
进行过滤,则无法使用该索引。