阅读<SQL语言艺术>实践一

【摘要】

动作丰富的SQL语句

Action-Packed SQL Statements

此节结论:

尽量减少过程逻辑出现在SQL语句,比如if-else之类;能使用一句SQL不要分解为过程逻辑,尽量由数据库系统来提高更高的效率。

为了说明这个问题,我简要测试以下语句:

A、

Update TBUser Set LoginPassword = 222222 Where UserID = 10020774
Begin
    If Exists(Select UserID From TBUser with(nolock) Where UserID = 10020774 And Birthday is null)
    Begin
        Update TBUser Set Birthday = TBUserHeadPic.CTime From TBUserHeadPic Where TBuser.UserID = 10020774 And TBuser.Birthday is null And TBUserHeadPic.UserID = 10020774 And TBUserHeadPic.IsUsed = 1;
    End
End

B、

Update TBUser Set Birthday = TBUserHeadPic.CTime,LoginPassword = 222222 From TBUserHeadPic Where TBuser.UserID = 10020776 And TBUserHeadPic.UserID = 10020776 And TBUserHeadPic.IsUsed = 1;

A、B两句在查询分析器中执行,得出以下结论:

满足Birthday=null条件下,A所有语句执行效率占68%,B语句占32%

不满足Birthday=null条件下,A所有语句执行效率占49%,B语句占51%

此例的Sql逻辑尽管有些混乱,但表述一点:从另一张表的数据赋值到另一表的过程。但在效率上下面一句的效率明显优势。

个人观点

原文地址:https://www.cnblogs.com/GoGoagg/p/1891827.html