存儲(chǔ)過(guò)程:create Procedure pname
創(chuàng)新互聯(lián)公司2013年至今,先為武定等服務(wù)建站,武定等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為武定企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分頁(yè):
sqlserver 在2008之前 使用 top 和 not int top 的方式來(lái)做分頁(yè)
2008以后使用 row_number() 函數(shù)作為分頁(yè)關(guān)鍵函數(shù)
2012使用 offset 1 fetch next 10 rows only
你問(wèn)了2個(gè)問(wèn)題,你可以優(yōu)先把視圖,存儲(chǔ)過(guò)程,觸發(fā)器等弄明白,分頁(yè)是查詢,在存儲(chǔ)過(guò)程里可以寫(xiě)復(fù)雜的sql文,只是在運(yùn)行時(shí)是預(yù)編譯和參數(shù)化查詢防止sql注入
盡量不要使用嵌套子查詢,優(yōu)先使用連接子查詢;
In 關(guān)鍵字盡量少使用,效率低,除非 in 包含的信息量非常少,并且叫固定;
如果查詢條件和查詢結(jié)果表無(wú)直接關(guān)聯(lián),優(yōu)先根據(jù)查詢條件查詢出符合條件的臨時(shí)結(jié)果值,然后和最終結(jié)果表關(guān)聯(lián);
除 top n 方式分頁(yè)之外,使用 row_number() over 方式分頁(yè)也可以;
能明確指定結(jié)果字段的,盡量不要用 * ;
不相關(guān)的字段可以省略;
如果最終結(jié)果表數(shù)據(jù)比較大,考慮分表,分區(qū),分庫(kù);
查詢結(jié)果表字段盡量不要包含大文本之類(lèi)的字段;
where 條件中對(duì)于varchar 字段 的 like 查詢要適度,不要用太多,會(huì)影響效率;
存儲(chǔ)過(guò)程:create Procedure pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分頁(yè):
sqlserver 在2008之前 使用 top 和 not int top 的方式來(lái)做分頁(yè)
2008以后使用 row_number() 函數(shù)作為分頁(yè)關(guān)鍵函數(shù)
2012使用 offset 1 fetch next 10 rows only
你問(wèn)了2個(gè)問(wèn)題,你可以優(yōu)先把視圖,存儲(chǔ)過(guò)程,觸發(fā)器等弄明白,分頁(yè)是查詢,在存儲(chǔ)過(guò)程里可以寫(xiě)復(fù)雜的sql文,只是在運(yùn)行時(shí)是預(yù)編譯和參數(shù)化查詢防止sql注入
臨近春節(jié),心早已飛了不在工作上了,下面小編給大家整理些數(shù)據(jù)庫(kù)的幾種分頁(yè)查詢。
Sql
Sever
2005之前版本:
select
top
頁(yè)大小
*
from
表名
where
id
not
in
(
select
top
頁(yè)大小*(查詢第幾頁(yè)-1)
id
from
表名
order
by
id
)
order
by
id
例如:
select
top
10
*
--10
為頁(yè)大小
from
[TCCLine].[dbo].[CLine_CommonImage]
where
id
not
in
(
--40是這么計(jì)算出來(lái)的:10*(5-1)
--
頁(yè)大小*(查詢第幾頁(yè)-1)
select
top
40
id
from
[TCCLine].[dbo].[CLine_CommonImage]
order
by
id
)
order
by
id
結(jié)果為:
Sql
Sever
2005及以上版本,多了個(gè)分頁(yè)查詢方法:
/*
*
firstIndex:起始索引
*
pageSize:每頁(yè)顯示的數(shù)量
*
orderColumn:排序的字段名
*
SQL:可以是簡(jiǎn)單的單表查詢語(yǔ)句,也可以是復(fù)雜的多表聯(lián)合查詢語(yǔ)句
*/
select
top
pageSize
o.*
from
(select
row_number()
over(order
by
orderColumn)
as
rownumber,*
from(SQL)
as
o
where
rownumberfirstIndex;
例如:
select
top
10
numComImg.*
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,*
from
(select
*
FROM
[TCCLine].[dbo].[CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber40
結(jié)果:
這兩個(gè)方法,就僅僅是多了一列
rewnumber
嗎?當(dāng)然不是,來(lái)看下內(nèi)部差別吧:
在兩個(gè)SQL上,分別加入以下SQL,并使用MS的“包括執(zhí)行計(jì)劃”,便于查看執(zhí)行詳情:
SET
STATISTICS
TIME
ON
GO
要執(zhí)行的SQL:
SET
STATISTICS
TIME
ON
GO
select
top
10
numComImg.*
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,*
from
(select
*
FROM
[TCCLine].[dbo].[CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber40
SET
STATISTICS
TIME
ON
GO
select
top
10
*
--10
為頁(yè)大小
from
[TCCLine].[dbo].[CLine_CommonImage]
where
id
not
in
(
--40是這么計(jì)算出來(lái)的:10*(5-1)
--
頁(yè)大小*(查詢第幾頁(yè)-1)
select
top
40
id
from
[TCCLine].[dbo].[CLine_CommonImage]
order
by
id
)
order
by
id
執(zhí)行之后,查看執(zhí)行計(jì)劃:
看得出,兩個(gè)同樣功能的SQL,執(zhí)行時(shí),使用
row_number()
的,要比是用
純TOP方式的,查詢開(kāi)銷(xiāo)少得多,上圖顯示
28:72,純top方式,使用了兩次聚集掃描。
再來(lái)看下執(zhí)行時(shí)間信息:
row_number()方式的:
純top方式:
相比之下,還是row_number()解析函數(shù)效率比較高寫(xiě)。
以上所述是小編給大家分享的SQLSERVER分頁(yè)查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同,希望對(duì)大家有所幫助。
本文題目:sqlserver分頁(yè),sqlserver分頁(yè)函數(shù)
分享鏈接:http://aaarwkj.com/article10/dsspjdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站策劃、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)