Django 会自动为外键列生成索引吗?

Posted

技术标签:

【中文标题】Django 会自动为外键列生成索引吗?【英文标题】:Does Django automatically generate indexes for foreign keys columns? 【发布时间】:2011-08-24 11:58:22 【问题描述】:

Django 是自动为外键生成索引,还是仅仅依赖于底层数据库策略?

【问题讨论】:

依赖ForeignKey中的db_index参数,默认为True。 【参考方案1】:

Django 自动为所有 models.ForeignKey 列创建索引。

来自Django documentation:

ForeignKey 上自动创建一个数据库索引。您可以通过将db_index 设置为False 来禁用此功能。如果您要创建外键以实现一致性而不是连接,或者要创建替代索引(如部分或多列索引),则可能希望避免索引的开销。

【讨论】:

我找不到关于这个事实的任何参考资料。对此有任何参考吗? 运行./manage.py sql appname,你会看到创建索引的SQL语句。它们紧跟在创建所需的最后一个表的 SQL 之后。 @LukeSneeringer,我不确定您给出的命令是否用于显示索引,但它不再显示了。相反,自己为索引运行./manage.py sqlindexes appname 也可以禁用在 ForeignKey 上创建索引:code.djangoproject.com/ticket/13730 @JesseBeder:./manage.py sqlindexes appname 在最近的 Django 版本中不再有效。

以上是关于Django 会自动为外键列生成索引吗?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL是不是自动索引外键列?

如何在 Spring JPA 中设置外键列

如何在 MySQL 表中添加外键列?

主键索引和唯一索引的区别

mysql 主键和唯一索引的区别

如何在Django中加入非主键和外键列的查询