美文网首页
记一次Sql性能优化

记一次Sql性能优化

作者: Codmowa | 来源:发表于2020-05-12 21:01 被阅读0次

    场景预设

    现有 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
    

    优化思路

    1. 因为数据从B到A , 所以 A 表的数据范围明显大于 B 表, 又因为需要找到二者之间重复的数据, 那么可以用 inner join
    2. 因为只需要Col001 进行 join 所以可以将 A B 两表的字段 into 到临时表
    3. 因为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 左右出结果,比起完不成还是能接受一点.

    总结

    工作经验, 不工作哪来的经验~

    相关文章

      网友评论

          本文标题:记一次Sql性能优化

          本文链接:https://www.haomeiwen.com/subject/jzvinhtx.html