科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道不要在SQL Server中盲目地追求一句处理

不要在SQL Server中盲目地追求一句处理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本篇针对使用 UNION ALL 代替 IF 语句的合并处理做出一个简单的事例,用来说明这种方法会所带来的负面结果。

作者:赛迪网 shuijing 来源:天新网 2008年4月24日

关键字: 数据库 Mssql SQL SQL Server

  • 评论
  • 分享微博
  • 分享邮件

进行性能测试:

DECLARE @a int

SET @a = 1

 

DECLARE @t TABLE(

    id int IDENTITY,

    a int, b int)

DECLARE @dt datetime, @loop int, @id int

SET @loop = 0

WHILE @loop < 5

BEGIN

    SET @loop = @loop + 1

    RAISERROR('test %d', 10, 1, @loop) WITH NOWAIT

    SET @dt = GETDATE()

        SELECT [ITEM] FROM A

        WHERE @a = 0

            AND [ITEM] < 'A'

        UNION ALL

        SELECT [ItemNumber] FROM B

        WHERE @a = 1

            AND [ItemNumber] < 'A'

    INSERT @t(a) VALUES(DATEDIFF(ms, @dt, GETDATE()))

    SELECT @id = SCOPE_IDENTITY(), @dt = GETDATE()

        IF @a = 0

            SELECT [ITEM] FROM A

            WHERE [ITEM] < 'A'

        ELSE IF @a = 1

            SELECT [ItemNumber] FROM B

            WHERE [ItemNumber] < 'A'

    UPDATE @t SET b = DATEDIFF(ms, @dt, GETDATE())

    WHERE id = @id

END

SELECT * FROM @t

UNION ALL

SELECT NULL, SUM(a), SUM(b) FROM @t

性能测试结果:

id  a       b

--- ------- -------

1   3410   2063

2   1703   1656

3   1763   1656

4   1800   1793

5   1643   1856

NULL   10319  9024

从结果看,两者的性能差异很小,所以两者从性能上比较,可以视为没有差异。

    • 评论
    • 分享微博
    • 分享邮件
    閭欢璁㈤槄

    濡傛灉鎮ㄩ潪甯歌揩鍒囩殑鎯充簡瑙T棰嗗煙鏈€鏂颁骇鍝佷笌鎶€鏈俊鎭紝閭d箞璁㈤槄鑷抽《缃戞妧鏈偖浠跺皢鏄偍鐨勬渶浣抽€斿緞涔嬩竴銆�

    重磅专题
    往期文章
    最新文章