有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。
方法1:
適用於 sql server 2000/2005
select
top頁大小
*from
table1
where
id notin(
select
top頁大小
*(頁數-1
) id
from
table1
order
byid
)order
byid
方法2:
適用於 sql server 2000/2005
select
top頁大小
*from
table1
where
id >
(select
isnull
(max
(id),0)
from
(select
top頁大小
*(頁數-1
) id
from
table1
order
byid) a
)order
byid
方法3:
適用於 sql server 2005
select
top頁大小
*from
(select
row_number()
over
(order
byid)
asrownumber,
*from
table1
) awhere
rownumber
>
頁大小*
(頁數-1)
說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把「頁大小」和「頁大小*(頁數-1)」替換成數字。
其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
建議優化的時候,加上主鍵和索引,查詢效率會提高。
通過sql 查詢分析器,顯示比較:我的結論是:
分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句
分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句
分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用
有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。
方法1:
適用於 sql server 2000/2005
select
top頁大小
*from
table1
where
id notin(
select
top頁大小
*(頁數-1
) id
from
table1
order
byid
)order
byid
方法2:
適用於 sql server 2000/2005
select
top頁大小
*from
table1
where
id >
(select
isnull
(max
(id),0)
from
(select
top頁大小
*(頁數-1
) id
from
table1
order
byid) a
)order
byid
方法3:
適用於 sql server 2005
select
top頁大小
*from
(select
row_number()
over
(order
byid)
asrownumber,
*from
table1
) awhere
rownumber
>
頁大小*
(頁數-1)
說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把「頁大小」和「頁大小*(頁數-1)」替換成數字。
其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
建議優化的時候,加上主鍵和索引,查詢效率會提高。
通過sql 查詢分析器,顯示比較:我的結論是:
分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句
分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句
分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用
SQL語句分頁查詢
關於sql語句分頁,網上也有很多啦,我貼一部分過來,並且總結自己已知的分頁到下面,方便日後查閱。方法1 適用於 sql server 2000 2005 1 select top 頁大小 2from table1 3where id not in4 5select top 頁大小 頁數 1 id f...
手寫分頁sql 分頁查詢SQL語句
表結構 drop table if exists zhoufoxcn userlist create table zhoufoxcn userlist userid int 10 unsigned not null auto increment,username varchar 45 not nul...
Sql 分頁語句
with temptb as select row number over order by id as rowid,from pagecut select from temptb where rowid between 2 50 and 2 50 50 這是乙個資料分頁方法,從sql2005起就支...