【发布时间】:2013-01-25 00:51:54
【问题描述】:
我正在阅读一本关于 Django 编码风格的书,他们讨论的一件事是db_index=True。自从我开始使用 Django 以来,我从来没有使用过这个函数,因为我不确定它是做什么的。
所以我的问题是,什么时候考虑添加索引?
【问题讨论】:
标签: django django-models django-database
我正在阅读一本关于 Django 编码风格的书,他们讨论的一件事是db_index=True。自从我开始使用 Django 以来,我从来没有使用过这个函数,因为我不确定它是做什么的。
所以我的问题是,什么时候考虑添加索引?
【问题讨论】:
标签: django django-models django-database
这并不是 django 特有的;更多地与数据库有关。当您想加快对该列的搜索时,您可以在该列上添加索引。
通常,只有主键被数据库索引。这意味着使用主键的查找得到了优化。
如果您对辅助列进行大量查找,请考虑向该列添加索引以加快处理速度。
请记住,与大多数规模问题一样,这些问题仅适用于您拥有大量统计数据的行(10,000 行不算大)。
此外,每次插入时,都需要更新索引。所以要小心你添加索引的列。
与往常一样,您只能优化您可以测量的内容 - 因此请使用 EXPLAIN 语句和您的数据库日志(尤其是任何慢查询日志)来找出索引在哪里有用。
【讨论】:
上述答案是正确的,但在某些情况下,搜索是在只有 varchar 数据类型(如 email)的列上进行的。在那里你需要添加一个索引。
以下是这样做的方式:
Index(name='covering_index', fields=['headline'], include=['pub_date'])
来自https://docs.djangoproject.com/en/3.2/ref/models/indexes/的参考
【讨论】: