You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中表达identifying与non-identifying关系及索引问题咨询

问题1:约束声明顺序是否有影响?

约束的声明顺序没有任何影响。MySQL在执行CREATE TABLE语句时,会先完成所有字段定义的解析,再统一处理所有约束规则,无论主键约束写在外键约束之前还是之后,最终生成的表结构完全一致。
你当前的写法就是identifying关系的标准实现:把genID同时作为外键和复合主键的组成部分,语法完全正确。唯一需要注意的小细节是你定义的字段名为小写的moveID、genID,但主键声明里写的是大写开头的MoveID、GenID,MySQL在Linux环境下表名、字段名区分大小写,建议统一大小写避免后续踩坑。

问题2:是否需要单独为genID创建索引?

需要单独创建索引。
MySQL的聚簇索引遵循最左前缀匹配规则,你当前的复合主键顺序是(moveID, genID),只有查询条件包含复合主键第一个字段moveID的时候,才能用到这个聚簇索引。你常用的按genID单独过滤的查询,genID在复合主键的第二位,无法触发聚簇索引匹配,会走全表扫描,数据量上来后效率会非常差,必须单独为genID创建普通索引才能满足查询效率需求。
如果你调整复合主键的顺序为(genID, moveID),那么按genID过滤的查询可以直接用到聚簇索引,不需要额外建索引,但如果你的业务还有大量单独按moveID查询的场景,还是建议保留原主键顺序,单独加genID的索引更灵活。


内容的提问来源于stack exchange,提问作者grogTheFrog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:03