sqlserver2005中ROW_NUMBER和存储过程性能比较www.129028.com金沙:

日期:2020-01-10编辑作者:数据库

对于 SQL SERVER 2000 及更早的版本,需要使用一个自增列,结合临时表来实现。 复制代码 代码如下:SELECT [AUTOID] = IDENTITY(int,1,1), * INTO #temp_table FROM 表名; 复制代码 代码如下:SELECT * FROM #temp_table; 从 SQL SERVER 2005 开始, SQL SERVER 提供了一个 ROW_NUMBER() 函数,大大简化了工作。 复制代码 代码如下:SELECT *,ROW_NUMBER() OVER (ORDER BY 排序字段) AS [AUTOID] FROM 表名; 序号字段的别名,可以在后续的条件中使用。

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

我们再来测试大数据库

SQL脚本:

  • ' SELECT' SET @SQL = @SQL + ' TOP ' + convert(nvarchar, @PageUpperBound) SET @SQL = @SQL + ' m_id' SET @SQL = @SQL + ' FROM dbo.mem_member' SET @SQL = @SQL + ' ORDER BY NameC' -- Populate the temp table exec sp_executesql @SQL

SELECT *

代码如下复制代码

WITH OrderedResults AS

在sql提供了ROW_NUMBER来做大数据量的操作,很多朋友不知道是ROW_NUMBER性能好还是存储过程的性能好,下面我们来看看测试实例。

代码如下复制代码

create table employee (empid int ,deptid int ,salary decimal(10,2))insert into employee values(1,10,5500.00)insert into employee values(2,10,4500.00)insert into employee values(3,20,1900.00)insert into employee values(4,20,4800.00)insert into employee values(5,40,6500.00)insert into employee values(6,40,14500.00)insert into employee values(7,40,44500.00)insert into employee values(8,50,6500.00)insert into employee values(9,50,7500.00)

empid deptid salary----------- ----------- ---------------------------------------1 10 5500.002 10 4500.003 20 1900.004 20 4800.005 40 6500.006 40 14500.007 40 44500.008 50 6500.009 50 7500.00

(SELECT *, ROW_NUMBER() OVER (order by Namec) as RowNumber FROM dbo.mem_member)

-- Return paged results SELECT O.* FROM dbo.mem_member O, #PageIndex PageIndex WHERE PageIndex.IndexID @PageLowerBound AND O.[m_Id] = PageIndex.[Id] ORDER BY PageIndex.IndexID drop table #PageIndex END

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

不管哪种写法,性能都不理想。在8,9万条数据的情况下要运行6秒左右。

本文由www.129028.com金沙发布于数据库,转载请注明出处:sqlserver2005中ROW_NUMBER和存储过程性能比较www.129028.com金沙:

关键词:

sqlserver 数据库日志备份和恢复步骤

--创建测试数据库 CREATE DATABASE Db GO --对数据库进行备份 BACKUPDATABASE Db TO DISK='c:db.bak' WITH FORMAT GO --创建测试表 CREATETA...

详细>>

SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题

面举一个例子来具体说明一下:有两个表SourceTable为登陆表,TargetTable为授权表,如果访问用户在登陆表中,更新授权...

详细>>

SQL【www.129028.com金沙】 实用语句

id name 1 a 2 b 3 c 1 a 2 b 3 c 以下的sql语句都以上面表mytable为准: 1、查询id=1,3记录的所有数据 复制代码代码如下:select *...

详细>>

存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)

复制代码 代码如下:create PROCEDUREsp_decrypt(@objectName varchar(50)) AS begin begin tran declare@objectname1 varchar(100),@orgvarbin varbinary...

详细>>