Django modelでの結合制約と結合インデックスの設定

1213 ワード

Django modelでは、1つのテーブルのいくつかのフィールドを結合制約し、結合インデックスします.たとえば、カートテーブルでは、登録されたユーザーと商品の2つのフィールドが一緒に一意のレコードを表します.
栗を挙げます.
Django modelでのカート表

class Cart(models.Model):
    user = models.ForeignKey(
        MyUser,
        verbose_name="  "
    )
    goods = models.ForeignKey(
        Goods,
        verbose_name="  "
    )
    num = models.IntegerField(
        verbose_name="    "
    )
    is_select = models.BooleanField(
        default=True,
        verbose_name="    "
    )

    class Meta:
        #          goods user    
        unique_together = ["goods", "user"]
        #     
        index_together = ["user", "goods"]

unique_together=[「goods」、「user」は連合制約を表し、「goods」と「user」は重複できない、同じではないことを表す.
index_together=[「user」、「goods」は連合インデックスを表し、「goods」と「user」は連合してクエリーを同期し、効率を向上させる.
統合インデックスのメリット
例SQL:select*from person where a=100 and b=100 and c=1000;
もしあなたのデータが1千万件あるとしたら、条件ごとに10%のデータをフィルタリングします.
1もし3つの単一のインデックスが先にaのインデックスを持って残りの100万のデータを探してそれからbの条件を持って残りの10万を探して更にcの条件を探して最後に1万のデータを得るならば
2もし連合インデックスならば彼の1千万のデータ*10%*10%*10%は直接1万のデータを得ます
結合インデックスを作成すると同時に、それらの間の組合せにインデックスを作成します.