最近被问了这么一个问题,父表A,字表B,B设置外键跟不设置外键有什么影响?
首先明白外键是主表的主键,默认建立了主键索引,如果子表B不设外键的字段有索引,explain一下查询语句可发现,对查询几乎没什么影响。
加外键前:
加外键后:
查询上是没有多大的区别,但是在修改删除上就有影响了,外键保证了数据的完整性。
但是目前很多公司包括我所在的公司都不会去使用外键,究其原因我认为是,设置了外键就定死了茶如数据的先后顺序,子表中插入数据必须判断外键,大大影响数据库的性能,维护起来也比较麻烦,而且很多代码逻辑就可以判断无需通过主外键判断。