SQL中Group分組獲取Top N方法實現可首選row_number建站
導讀:1建站知識統計每個城市的最新10個產品本文采用了游標方法/Count查詢/cross apply方法/row_number方法等等對比不難發現Group獲取Top網站建設網站建設多少錢。
有產品表,包含網站seo優化診斷工具id,name,city,addtime四個字段,因報表需要按城市分組,統計每個城市的最新10個產品,便向該表中插入了100萬數據,做了如下系列測試:
復制代碼 代碼如下:
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方法,執行5次,平均下來8秒左右,速度最快。復制代碼 代碼如下:
select no, id,name,city from (select no =row_number() over (partition by city order by addtimseo網站優化e desc), * from products)t where no< 11 order by city asc,addtime desc
2、采用cross apply方法,執行了3次,基本都在3分5秒以上,已經很慢了。復制代碼 代碼如下:
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查詢,只執行了兩次,第一次執行到5分鐘時,取消任務執行了;第二次執行到13分鐘時,沒有hold住又直接停止了,實在無法忍受。復制代碼 代碼如下:
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、采用游標方法,這個最后測試的,執行了5次,每次都是10秒完成,感覺還不錯。復制代碼 代碼如下:
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
通過上述對比不難發現,在面臨Group獲取Top N場景時,可以首選row_number,游標cursor其次,另外兩個就基本不考慮了,數據量大的時候根本沒法使用。相關網站建設網站建設多少錢。聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-24 ,文章SQL中Group分組獲取Top N方法實現可首選row_number建站主要講述首選,標簽,SQL網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_6489.html
- 上一篇:Oracle解鎖的方式介紹建站知識
- 下一篇:百家號什么是保留款,怎么修改?建站知識