83

我正在阅读一本关于 Django 编码风格的书,他们讨论的一件事是db_index=True. 自从我开始使用 Django 以来,我从未使用过此功能,因为我不确定它的作用。

所以我的问题是,何时考虑添加索引?

4

2 回答 2

164

这不是真正的 django 特定的;更多地与数据库有关。当您想加快对该列的搜索时,您可以在该列上添加索引。

通常,只有主键被数据库索引。这意味着使用主键的查找得到了优化。

如果您对辅助列进行大量查找,请考虑向该列添加索引以加快速度。

请记住,与大多数规模问题一样,这些问题仅适用于统计上大量的行(10,000 不算大)。

此外,每次插入时,都需要更新索引。所以要小心添加索引的列。

与往常一样,您只能优化您可以测量的内容 - 因此使用EXPLAIN语句和数据库日志(尤其是任何慢查询日志)来找出索引在哪里有用。

于 2013-02-09T08:52:03.090 回答
0

上面的答案是正确的,但在某些情况下,搜索是在只有 varchar 数据类型(如email. 在那里你需要添加一个索引。

以下是这样做的方法:

Index(name='covering_index', fields=['headline'], include=['pub_date'])

来自https://docs.djangoproject.com/en/3.2/ref/models/indexes/的参考

于 2021-11-01T09:48:37.660 回答