国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL中Group分組獲取Top N方法實(shí)現(xiàn)可首選row_number

2024-08-31 00:44:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
有產(chǎn)品表,包含id,name,city,addtime四個(gè)字段,因報(bào)表需要按城市分組,統(tǒng)計(jì)每個(gè)城市的最新10個(gè)產(chǎn)品,便向該表中插入了100萬(wàn)數(shù)據(jù),做了如下系列測(cè)試:

復(fù)制代碼 代碼如下:


CREATE TABLE [dbo].[products](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NULL,
[addtime] [datetime] NULL,
[city] [nvarchar](10) NULL,
CONSTRAINT [PK_products] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


1、采用row_number方法,執(zhí)行5次,平均下來(lái)8秒左右,速度最快。

復(fù)制代碼 代碼如下:


select no, id,name,city
from (select no =row_number() over (partition by city order by addtime desc), * from products)t
where no< 11 order by city asc,addtime desc


2、采用cross apply方法,執(zhí)行了3次,基本都在3分5秒以上,已經(jīng)很慢了。

復(fù)制代碼 代碼如下:


select distinct b.id,b.name,b.city from products a
cross apply (select top 10 * from products where city = a.city order by addtime desc) b


3、采用Count查詢(xún),只執(zhí)行了兩次,第一次執(zhí)行到5分鐘時(shí),取消任務(wù)執(zhí)行了;第二次執(zhí)行到13分鐘時(shí),沒(méi)有hold住又直接停止了,實(shí)在無(wú)法忍受。

復(fù)制代碼 代碼如下:


select id,name,city from products a
where ( select count(city) from products where a.city = city and addtime>a.addtime) < 10
order by city asc,addtime desc


4、采用游標(biāo)方法,這個(gè)最后測(cè)試的,執(zhí)行了5次,每次都是10秒完成,感覺(jué)還不錯(cuò)。

復(fù)制代碼 代碼如下:


declare @city nvarchar(10)
create table #Top(id int,name nvarchar(50),city nvarchar(10),addtime datetime)
declare mycursor cursor for
select distinct city from products order by city asc
open mycursor
fetch next from mycursor into @city
while @@fetch_status =0
begin
insert into #Top
select top 10 id,name,city,addtime from products where city = @city
fetch next from mycursor into @city
end
close mycursor
deallocate mycursor
Select * from #Top order by city asc,addtime desc
drop table #Top


通過(guò)上述對(duì)比不難發(fā)現(xiàn),在面臨Group獲取Top N場(chǎng)景時(shí),可以首選row_number,游標(biāo)cursor其次,另外兩個(gè)就基本不考慮了,數(shù)據(jù)量大的時(shí)候根本沒(méi)法使用。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 合作市| 桂林市| 库伦旗| 金昌市| 东山县| 曲周县| 怀集县| 青冈县| 昆明市| 广西| 松原市| 南溪县| 湾仔区| 河间市| 江阴市| 芜湖县| 井冈山市| 田阳县| 慈利县| 九江市| 二连浩特市| 曲沃县| 武邑县| 仁化县| 齐齐哈尔市| 五常市| 宁海县| 盘锦市| 莱阳市| 连南| 武安市| 永嘉县| 桓台县| 固始县| 阿勒泰市| 鸡东县| 洛川县| 靖远县| 广宗县| 遂平县| 宽甸|