zoukankan      html  css  js  c++  java
  • 临时表性能问题

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

    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

  • 相关阅读:
    BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)
    BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
    BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)
    hdu3873 有约束条件的最短路
    尺取法 poj3061 poj3320
    费马小定理与欧拉公式
    uva 571 素数的性质
    uva10791 uva10780(分解质因数)
    勾股数组及其应用uva106
    hdu3501
  • 原文地址:https://www.cnblogs.com/mikel/p/1317394.html
Copyright © 2011-2022 走看看