外键对删除数据的影响
这几天一直在做生产系统数据库垃圾数据的删除,主表数据量有两个多亿,各种关联关系确定要删除的表有20个。列下碰到的问题和我的解决方法。
1. 外键对删除数据的影响
有两个表A和B。A中字段有id column1,B中有字段id,key,val,B表中val 是A表id的外键,A表主键id,B表主键id,key。这样建表似乎没什么问题,挺合适的。
但是当我们删除A表中一条数据时数据库会先去check B表有没有数据引用A表,如果没有那么删除,如果有给出外键约束。我们知道,如果表中数据达到一定数量级的时候在没有索引查询一条数据要做全表扫描,这是很耗时的,我的测试结果是已没有索引的列为条件时在2亿数据量的表中查询一条数据大概在12秒左右。加上索引的话快了不知道多少倍,所以当我们建表的时候如果有主外键关系,请给外键的地方加上索引吧,也就是这里B表的val。