• 临时表性能问题


    我的存储过程分页部分,利用了三次相同条件的查询,获得最终的数据
    代码如下:

    SQL code

    DECLARE @TotalPage int
    SELECT @TotalPage=Count(Identifier) FROM View_BbsInfo WHERE
    (
    @Identifier IS NULL OR Identifier=@Identifier)AND
    (
    @IsTop IS NULL OR IsTop=@IsTop)AND
    (
    @IsPlacard IS NULL OR IsPlacard=@IsPlacard)
    IF(@TotalPage%@PageSize=0)
    BEGIN
    SET @TotalPage=@TotalPage/@PageSize
    END
    ELSE
    BEGIN
    SET @TotalPage=Round(@TotalPage/@PageSize,0)+1
    END
    SELECT TOP (@PageSize) Identifier,IsTop,IsPlacard,@TotalPage as totalPage FROM View_BbsInfo WHERE
    Identifier
    NOT IN (SELECT Top (@PageSize*(@CurrentPage-1))Identifier FROM View_BbsInfo WHERE
    (
    @Identifier IS NULL OR Identifier=@Identifier)AND
    (
    @IsTop IS NULL OR IsTop=@IsTop)AND
    (
    @IsPlacard IS NULL OR IsPlacard=@IsPlacard))
    AND
    (
    @Identifier IS NULL OR Identifier=@Identifier)AND
    (
    @IsTop IS NULL OR IsTop=@IsTop)AND
    (
    @IsPlacard IS NULL OR IsPlacard=@IsPlacard)



    优化后,我首先利用临时表将条件查询的所有结果存储起来,然后再分页查询该临时表

    代码如下:
    SQL code

    --查询结果到临时表
    SELECT TOP (@PageSize) Identifier,IsTop,IsPlacard INTO #tempTable FROM View_BbsInfo WHERE
    (
    @Identifier IS NULL OR Identifier=@Identifier)AND
    (
    @IsTop IS NULL OR IsTop=@IsTop)AND
    (
    @IsPlacard IS NULL OR IsPlacard=@IsPlacard)

    DECLARE @TotalPage int
    SELECT @TotalPage=Count(Identifier) FROM #tempTable
    IF(@TotalPage%@PageSize=0)
    BEGIN
    SET @TotalPage=@TotalPage/@PageSize
    END
    ELSE
    BEGIN
    SET @TotalPage=Round(@TotalPage/@PageSize,0)+1
    END
    SELECT TOP (@PageSize) Identifier,IsTop,IsPlacard,@TotalPage as totalPage FROM #tempTable WHERE
    Identifier
    NOT IN (SELECT Top (@PageSize*(@CurrentPage-1))Identifier FROM #tempTable



    问题来了,没进行测试,不知道哪种的性能更好些?

    尽管减少了三次查询的过程,但是建立临时表的过程依然需要插入、查询操作,感觉性能的确不好确定
    希望各位帮忙解释一下哪种比较好?


    作者:mikel
    出处:http://www.cnblogs.com/mikel/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    该文章也同时发布在我的独立博客中-www.mikel.cn

  • 相关阅读:
    Linux查看硬盘使用情况
    2020/05/23,帮亲不帮理
    写作,阅读新单词
    fpga与asic的区别
    ASIC NP FPGA CPU有啥区别?
    基因编程时代要来临了?什么物种都可以创造?细思极恐
    视网膜识别VS虹膜识别 谁更胜一筹
    CNN进化史
    生物神经元与人工神经元模型
    tensorflow简介以及与Keras的关系
  • 原文地址:https://www.cnblogs.com/mikel/p/1317394.html
Copyright © 2020-2023  润新知