db2有两张表,a主表 b从表,b的外键是a的主键 a b两个表数据量都超过百万, 删除a表的一条记录,用主键作为删除条件,时间有明
db2有两张表,a主表 b从表,b的外键是a的主键
a b两个表数据量都超过百万,
删除a表的一条记录,用主键作为删除条件,时间有明显的延迟。
如果用其他字段做where条件,一次删除目标为几百条,等了几分钟也没有删成功。
如果先删除b表应该关联删除的数据,删掉几百条也很快。但是再删a表数据还是不行。
分析原因,,删b表数据db2直接删了,所以快。
删a表数据的时候db2会先去b表查询关联记录,这样一次删除a表中目标为几百条记录的实际需要的操作是:
1 根据条件选出a表记录集合,a
2. 以a为驱动表,在b表中查询关联记录,并记录结果为b
3. 删除b表中关联的数据b
4. 删除a
由于删除涉及到两张表,实际上从1到4的操作db2会自己加上事务,这样就慢了。
解决方法:
很简单,取消b的外键,然后删除就像闪电一样快了 :)