我正在研究如何在Django中创建索引.我从两个方面了解到:

  1. Class Student(models.Model): name= models.CharField(........, db_index=True) age= models.CharField(........, db_index=True)
  2. Class Student(models.Model): name= models.CharField(........) age= models.CharField(........) Class Meta: indexes = [models.Index(name="first_index",fields=["name","age"],)]

谁能解释一下它们之间的区别是什么?此外,在db_index=true方法中,db_index=true的所有字段是否都有一个索引?

推荐答案

后者将创建一个combined索引,也就是接受这两个字段的索引,如果这两个字段都指定为有效,则进行检索.

这意味着如果只给出name作为筛选依据,索引将(可能)没有用,如果您只指定age,这将是相同的,只有在您同时指定nameage的情况下,在第二种情况下索引将是有用的.

然而,如果在组合上有索引时指定两者,它会更有用,这样它就可以轻松地找到具有该名称和年龄的Student(S).否则,它可能会同时在两个索引中查找,然后创建一组同时出现在这两个索引中的记录.

然而,这两者并不是相互排斥的,您可以将nameage以及nameage的索引与以下各项结合使用:

class Student(models.Model):
    name= models.CharField(max_length=128, db_index=True)
    age = models.IntegerField(db_index=True)
    
    class Meta:
        indexes = [models.Index(name='name_age_index', fields=['name','age'],)]

Python相关问答推荐

两极按组颠倒顺序

在Python中根据id填写年份系列

Flask:如何在完整路由代码执行之前返回验证

Pandas read_jsonfuture 警告:解析字符串时,to_datetime与单位的行为已被反对

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

具有2D功能的Python十六进制图

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

添加包含中具有任何值的其他列的计数的列

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

Pythind 11无法弄清楚如何访问tuple元素

比较两个数据帧并并排附加结果(获取性能警告)

根据不同列的值在收件箱中移动数据

如何根据参数推断对象的返回类型?

标题:如何在Python中使用嵌套饼图可视化分层数据?

使可滚动框架在tkinter环境中看起来自然

如何让程序打印新段落上的每一行?

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

当独立的网络调用不应该互相阻塞时,'

当我try 在django中更新模型时,模型表单数据不可见

剪切间隔以添加特定日期