MySQL不为外键创建索引。

19 浏览
0 Comments

MySQL不为外键创建索引。

我了解到InnoDB会自动为外键创建索引。

但是我的一些外键在表中没有索引。请检查`pharmaceutical_id`外键字段,它没有索引。

我在`pharmaceutical_id`和`code_id`上添加了唯一约束,可能导致`pharmaceutical_id`没有单独的索引,因为MySQL以B-Tree的方式管理这些索引,并且唯一约束键的索引可以用于它。

请查看https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html上限制和条件的第6点。

然而,如果上述观点是正确的,那么为什么下面的表模式中有一个`member_id`的索引呢?因为`patients_membercard_member_id_661ac31abca894ae_uniq`之后的`patients_membercard_b5c3e75b`索引是多余的。

注:上述表模式是由Django创建的,数据库没有进行手动操作。

0
0 Comments

问题原因:开发人员在使用Django创建表时,为了确保能够控制索引名称,他们假设每个外键都需要自己的索引,并在CREATE TABLE语句中显式生成了索引的定义。这导致MySQL在创建外键时没有为其创建索引。

解决方法:可以通过手动创建索引解决这个问题。可以按照以下步骤操作:

1. 找到CREATE TABLE语句中为外键定义了额外索引的部分,例如:KEY patients_membercard_b5c3e75b (member_id)

2. 将这部分代码注释掉或删除,以便不再创建该额外索引。

3. 保存并执行修改后的CREATE TABLE语句。

这样,MySQL在创建表时将不会为外键创建额外的索引,从而解决了问题。

0