SQL分頁實現 Offset Fetch

2022-03-02 21:22:28 字數 1924 閱讀 9587

分頁實現的方法又多了一種,在sql server 2012版本中,tsql在order by子句中新增 offset-fetch子句,用於從有序的結果集中,跳過一定數量的資料行,獲取指定數量的資料行,從而達到資料行分頁的目的。經過測試,從邏輯讀取數量和響應的時間消耗來測評,使用offset-fetch實現的分頁方式,比row_number()方式效能要高很多。

offset-fetch子句要求結果集是有序的,因此,只能用於order by 子句中,語法如下:

order by order_by_expression [ asc | desc ]  [ ,...n ] [ ]

::= rows

[ fetch next rows only ]

}

關鍵字解析:

分頁實現的思路:

在分頁實現中,使用order by子句,按照指定的columns對結果集進行排序;

使用offset子句跳過前n頁:offset (@pageindex-1)*@rowsperpage rows;

使用fetch子句呈現當前page:fetch next @rowsperpage rows only;

建立示例資料

use tempdb

gocreate table dbo.dt_test

(id int,

code int)go

insert into dbo.dt_test(id,code)

values(1,1),(2,2),(3,1),(4,2),(5,1),(6,2)

1,使用offset子句跳過指定數目的資料行

2,使用offset-fetch子句跳過指定數目的資料行之後,返回指定數目的資料行

3,修改成分頁的通用格式

--分頁的索引,頁碼從1開始

declare @pageindex int

--每頁顯示的行數

declare @size int

set @pageindex=1

set @size=100

select *

from dbo.dt_test

order by id

offset (@pageindex - 1) * @size rows

fetch next @size rows only

二,排序(order by)order by子句的語法是:order by order_by_expression ,用於按照指定字段進行排序,通常有3種寫法:

上述三種寫法都會對查詢結果集進行排序,返回的結果集是有序的,但是,如果這樣寫,在order by子句中使用乙個常量:

order by (select 1)
該子句中的 1 不是列的序號,而是常量,sql server按照結果集的原始順序返回,order by子句不對結果集排序。

SQL實現分頁

表中主鍵必須為標識列,id int identity 1,1 1 分頁方案一 利用not in和select top分頁 語句形式 select top 10 from 表 where id not in select top20id from 表 order by id ast order by ...

sql語句實現分頁

sql語句實現分頁 sqlstr select top 10 from shebei where id not in select top cint pagenum 1 10 id from shebei order by id desc order by id desc 計算總頁數 dimstr ...

SQL 實現分頁查詢

原文 sql 實現分頁查詢 在查詢資料中,對於某些資料量過大,為了減少頁面上單頁的載入時間,我們常常會選擇分頁查詢,分頁查詢有很多方法,下面主要介紹兩種分頁方法。一.通過主鍵來實現分頁 1.資料庫背景.person表,id主鍵盤,自增1,varchar行name.2.裡面包含了10條資料。3.可以通...