临时表性能问题

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

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



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

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

转载于:https://www.cnblogs.com/mikel/archive/2008/10/23/1317394.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值