MySQL不为外键创建索引。
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创建的,数据库没有进行手动操作。
问题原因:开发人员在使用Django创建表时,为了确保能够控制索引名称,他们假设每个外键都需要自己的索引,并在CREATE TABLE语句中显式生成了索引的定义。这导致MySQL在创建外键时没有为其创建索引。
解决方法:可以通过手动创建索引解决这个问题。可以按照以下步骤操作:
1. 找到CREATE TABLE语句中为外键定义了额外索引的部分,例如:KEY patients_membercard_b5c3e75b (member_id)
。
2. 将这部分代码注释掉或删除,以便不再创建该额外索引。
3. 保存并执行修改后的CREATE TABLE语句。
这样,MySQL在创建表时将不会为外键创建额外的索引,从而解决了问题。