【问题标题】:How does Django name the index automatically created for foreign keys columns?Django如何命名为外键列自动创建的索引?
【发布时间】:2016-09-01 17:10:05
【问题描述】:

我知道 Django 会自动为外键生成索引,除非我们使用 db_index=False 定义字段。 我在django doc读过它

但是我不知道是否可以选择索引名称,或者django如何选择它。

总是类似于“tablename_xxxxxx”。

“xxxxx”是随机字符吗?

已编辑: 我发现“xxxx”是模型字段名称的一些编码,但我仍然不知道我们是否可以选择一个明确的名称

【问题讨论】:

  • xxx 部分是否类似于 _ibfk_1?
  • 在我的真实案例中,完整的索引名称是 tablename_dbaea34e,但是这些字符对我来说没有意义

标签: mysql django


【解决方案1】:

据我所知,没有办法选择索引的名称。它实际上是动态计算的,它暗示了表名和列名的哈希值。

例如看code source here,即使它是针对特定版本的 Django,我不知道对名为 index 的用户有任何更改。

【讨论】:

  • 知道并非易事,我可以花时间寻找另一种解决方案。谢谢。
【解决方案2】:

是否可以选择索引名称?是的,但这样做没有任何好处。

第一步是关闭constraint,然后需要手动添加一个到migrations中的migrations.RunSQL 是的,这是一项艰巨的工作,完全不值得这样做。

【讨论】:

  • 我没有想到这个解决方案,但你说得对,工作太辛苦了。关键是我在创建 FK 后重命名了它,然后我添加了另一个 FK,它(幸运地)与旧的 FK 具有相同的名称,而 Django 试图创建一个已经创建的索引。显然是一个远程案例,它还有其他解决方案,但我很好奇。 +1
  • 除非 Django 有一种未记录的方法来对索引进行集群,否则手动命名的索引(加上一个 RunSQL 来集群)是对数据库进行集群以提高效率的唯一方法。
猜你喜欢
  • 2021-11-18
  • 2011-08-24
  • 2010-10-24
  • 2011-08-22
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多