很淺顯易懂的解釋了什麼是聯合索引

在Django model中對一張表的幾個字段進行聯合約束和聯合索引,例如在購物車表中,登陸的用戶和商品兩個字段在一塊兒表示惟一記錄。code

舉個栗子:

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"表示不能重複,不能同樣。get

index_together = ["user", "goods"] 表示聯合索引,其中"goods"和"user"聯合同步查詢,提升效率。同步

聯合索引的優點

​ 示例SQL:select * from person where a=100 and b=100 and c=1000;class

​ 假設你的數據有一千萬條 每次條件過濾 省10%的數據效率

​ 1 若是三個單索引 先拿a的索引找 剩下100萬數據 而後拿b條件找 剩十萬 再c條件找 最後獲得一萬數據登錄

​ 2 若是是聯合索引 他 一千萬數據10% 10% * 10% 直接獲得一萬條數據select

​ 創建聯合索引的同時 還會給他們之間的組合創建索引model

相關文章
相關標籤/搜索