Django model 中設置聯合約束和聯合索引的方法
在Django model中對一張表的幾個字段進行聯合約束和聯合索引,例如在購物車表中,登錄的用戶和商品兩個字段在一起表示唯一記錄。
舉個栗子:
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="選中狀態(tài)" ) class Meta: # 聯合約束 其中goods和user不能重復 unique_together = ["goods", "user"] # 聯合索引 index_together = ["user", "goods"]
unique_together = ["goods", "user"] 表示聯合約束,其中"goods"和"user"表示不能重復,不能一樣。
index_together = ["user", "goods"] 表示聯合索引,其中"goods"和"user"聯合同步查詢,提高效率。
聯合索引的優(yōu)勢
示例SQL:select * from person where a=100 and b=100 and c=1000;
假設你的數據有一千萬條 每次條件過濾 省10%的數據
1 如果三個單索引 先拿a的索引找 剩下100萬數據 然后拿b條件找 剩十萬 再c條件找 最后得到一萬數據
2 如果是聯合索引 他 一千萬數據*10% * 10% * 10% 直接得到一萬條數據
建立聯合索引的同時 還會給他們之間的組合建立索引
以上這篇Django model 中設置聯合約束和聯合索引的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python 實現Numpy中找出array中最大值所對應的行和列
今天小編就為大家分享一篇Python 實現Numpy中找出array中最大值所對應的行和列,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python模型聚合查詢\Q查詢\F查詢\分組查詢操作技巧解析
這篇文章主要介紹了模型查詢中的一些操作技巧,主要包括模型聚合查詢,Q查詢,F查詢,分組查詢,有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09