簡體   English   中英

獲取索引查找而不是在分頁臨時表中進行掃描?

[英]Get index seek instead of scan in paging temp table?

我已經創建了一個臨時表來測試我對intindex的主鍵。

當我select * from #TmpDashboard where intindex = 1我得到了索引查找。

但是,當我應用分頁公式時,會得到索引掃描,這會導致性能問題。

Declare @Currentpage      INT = 1
      ,@Pagesize         INT = 10

select * from #TmpDashboard 
WHERE  (@Pagesize = 0 OR (intIndex BETWEEN ((@CurrentPage - 1) * @PageSize) + 1 AND (@CurrentPage * @PageSize))) --gives index scan

我如何轉換上面的公式以獲得索引查找。

WHERE子句中的“ OR”導致掃描,因為它使該語句不確定。 我建議設置第二組變量,您可以使用它們來簡化查詢,如下所示:

 Declare @Currentpage      INT = 1
      ,@Pagesize         INT = 10;

declare @start int = Case when @pagesizee = 0 then 0 else ((@CurrentPage - 1) * @PageSize) + 1 end
, @end int = case when @pagesize > 0 then @CurrentPage * @PageSize else (select max(intindex) from #tmpdashboard) end

select * from #TmpDashboard 
WHERE  intindex between @start and @end
create table #TmpDashboard (intindex int primary key)
select * from #TmpDashboard where intindex = 1
Declare @Currentpage INT, @Pagesize INT;
select  @Currentpage= 1, @Pagesize = 10;

select * from #TmpDashboard 
WHERE  intIndex BETWEEN ((@CurrentPage - 1) * @PageSize) + 1 AND (@CurrentPage * @PageSize)
drop table #TmpDashboard

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM