index_together的顺序在Django模型中是否重要?

时间:2014-02-13 12:01:35

标签: mysql sql django postgresql

在使用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是否希望按顺序查询列?

除此之外,将列一起索引与单独索引之间是否存在很大差异?

1 个答案:

答案 0 :(得分:9)

index_together的顺序解释了创建索引的“路径”。 您可以从左向右查询以从索引中获利。

首先使用您的第一个index_together

    index_together = ('name', 'address', 'favorite_color')

如果您的第一个过滤器是name,则使用索引。如果第一个是name而第二个是address,则也使用索引。

但是,如果您按address然后nameaddressfavorite_color进行过滤,则无法使用该索引。