• sql语句(一)— —判断是否有这条数据的优化


    今天发现一个业务上的存储过程写的不够完善,和老板反应后,老板说你来完善吧,我:苦瓜脸~。说实话,我对SQL语句的熟练程度真的是不提也罢【捂脸】,大概的判断流程我知道,但是真的让我自己写,还真得上网查查相关资料。

    主要的业务逻辑是这样的,涉及到表A,表B。首先要根据传入的参数从表A里面获取到一个数据memberId,然后根据获取到的memberId到表B里面查询出这一条数据,并更新。

    问题:只是说找到这条数据更新,但是并没有做是否有这条数据的判断,所以我在执行存储过程的时候报错了。

    解决思路:先根据从表A里面获取到的memberId判断表B里是否存在这条数据,如果不存在,插入;如果存在,则更新。

    我是这么写的:如果数据数量特别多,几百万条甚至更多的话,要从头到尾都过一遍,很耗时间。

    declare @tCount int;
    select @tCount=COUNT(*) from dbo.Accounts where MemberId = @tMemberId
    if(@tCount=0)
        begin
            insert into dbo.Accounts values(@tBalance,@tMemberId)
        end

    我们老板提建议优化后的代码:我们的目的只是判断是否存在这条数据,完全可以用exists来判断是否存在,因为它一旦碰到符合条件的数据就不会往下执行了,比较节省时间和资源。

    1 if(not exists(select 1 from dbo.Accounts where MemberId = @tMemberId))
    2     begin
    3         insert into dbo.Accounts values(@tBalance,@tMemberId)
    4     end

    不管是写后台代码还是sql语句,都要在完成功能的同时考虑到优化,这样的代码才是经得住考验的。

    技术点滴,在于积累,继续坚持!

  • 相关阅读:
    PHP技巧通过COM使用ADODB
    PHP开发环境安装配置全攻略
    散列表
    poj Antiprime Sequences
    HDU 2011 菜鸟杯
    UVA The ? 1 ? 2 ? ... ? n = k problem
    poj 3126 Prime Path
    uva 699 The Falling Leaves
    UVA Steps
    poj 1426 Find The Multiple
  • 原文地址:https://www.cnblogs.com/wsn1203/p/7205513.html
Copyright © 2020-2023  润新知