django models索引_Django Models中索引和联合索引的建立使用

索引在数据库中有很重要的地位,它可以极大的提高数据的查询速度,但是过多的索引也会降低插入、删除、更新表的速度。因为在执行这些写操作时,还要操作索引文件。

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="选中状态"

)

例如单独创建person字段的索引

name = models.CharField(

blank=True,null=True,max_length=50,

verbose_name="姓名",

db_index=True

)

当然,除了这一种方式外,还有以下两种,分别是:

unique_together 联合主键,包含 index_together

index_together 组合索引

例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录。

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;

​假设你的数据有一千万条 每次条件过滤 省10%的数据

​1、如果三个单索引 先拿a的索引找 剩下100万数据 然后拿b条件找 剩十万 再c条件找 最后得到一万数据

​2、如果是联合索引 他 一千万数据*10% * 10% * 10% 直接得到一万条数据

建立联合索引的同时,还会给他们之间的组合建立索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值