场景预设
现有 A B 两个表
- A 代表具体业务表
- B 中间表, 需要将B表的数据插入到A表
插入前 需要进行重复性校验.
##原sql 如下
##Col001 是一个不会重复的主键.
## field_1 限制本次要插入的范围
## 如果 field_0 有数据则说明数据重复
select b.field_0 from A a left join B b
on a.Col001 = b.Col001 where and b.field_1 = @Field1 group by field_0
优化思路
- 因为数据从B到A , 所以 A 表的数据范围明显大于 B 表, 又因为需要找到二者之间重复的数据, 那么可以用 inner join
- 因为只需要Col001 进行 join 所以可以将 A B 两表的字段 into 到临时表
- 因为A 表的数据一般都是冷数据, 所以是否脏读 影响不大所以可以开启 with(nolock)
最后的sql 大致如下
select field_0 , Col001 into #temp from A a with(nolock)
select Col001, field_0, Field1 into #tempB from
B with(nolock) where field_1 = @Field1
select #temp.field_0 from #temp inner join
#tempB b with(nolock)
on #temp.Col001 =b.Col001 group by #temp.field_0
最终执行此命令 Col001 12w行的情况下大概在2s 左右出结果,比起完不成还是能接受一点.
总结
工作经验, 不工作哪来的经验~
网友评论