有關分頁 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搞定分頁
xpsql 使用者名稱 like 王 sql string.format select from select row number over order by as keelid,from as keeltemp where keeltemp.keelid and keeltemp.keelid ...
一句sql 分組統計數量
size x large select count tsuser.fid case when tsuser.fstoreid is not null then select s.fname from tustore s where s.fid tsuser.fstoreid end a,使用者的門店...
一句SQL完成動態分級查詢
在最近的 活字格專案中使用 activereports 報表設計器設計乙個報表模板時,遇到乙個多級分類的難題 需要將某個部門所有銷售及下屬部門的銷售金額彙總,因為下屬級別的層次不確定,所以靠拼接子查詢的方式顯然是不能滿足要求,經過一番實驗,利用了cte common table expression...