【问题标题】:When we should use db_index=True in Django?我们什么时候应该在 Django 中使用 db_index=True?
【发布时间】:2020-04-23 01:21:45
【问题描述】:

我们什么时候应该在模型字段上定义db_index=True

我正在尝试优化应用程序并想了解更多关于 db_index 的信息,我们应该在哪些条件下使用它?

文档说,在模型字段上使用 db_index=True 可以加快查找速度,但在存储和内存方面略有缺点。

我们是否应该只在那些具有唯一值的字段上使用db_index=True,例如主字段id?如果我们为那些不唯一且包含重复数据的字段启用索引会发生什么。

【问题讨论】:

  • 这是一个极其复杂的问题。这取决于您使用的数据库、存储的数据、查询数据的方式、正在执行的写入/读取次数,它会继续……通常情况下会在这里和那里进行一些调整,直到您获得您想要的性能。不过,作为一个简单的规则:您将始终过滤的任何字段都将从被索引中受益
  • 一个非常相似的问题:Add Indexes db_index=True

标签: django django-models django-rest-framework django-forms


【解决方案1】:

如果您有一个独特的字段可以进行更有用的查找,我会说您应该使用db_index=True

例如,如果您的表 customers 包含许多 users 的记录,则它们每个都有自己独特的 user_id。每个user_id 都是唯一的,并且必须索引此字段以发现唯一用户比说他们的first_namelast_name 更常见。实际上这也可以,但由于它们不是唯一的,您可能会从查询中收到多个结果,这可能不如使用引用他们的 id 有用。

查看here 了解有关索引的更多信息

【讨论】:

  • 大多数数据库都会自动为外键添加索引
  • 换句话说,如果你打算使用Entity.objects.get(some_field=some_value),就使用db_index=True
猜你喜欢
  • 2021-09-07
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 2017-09-13
  • 2021-12-29
  • 2011-07-17
相关资源
最近更新 更多