我们啥时候应该在 Django 中使用 db_index=True?

Posted

技术标签:

【中文标题】我们啥时候应该在 Django 中使用 db_index=True?【英文标题】: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 【参考方案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

以上是关于我们啥时候应该在 Django 中使用 db_index=True?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该在 django 模型字段上使用 null=False

Django:啥时候运行makemigrations?

我们啥时候应该使用 SNOWPIPE?

我们啥时候应该在布局中使用 dp 或 sp?

我们啥时候应该使用 Observer 和 Observable?

我们啥时候应该在 IIS 中托管 WCF 服务,啥时候应该在 Windows 服务中托管?