Sql server 将桌子切成大小为N的树干?

Sql server 将桌子切成大小为N的树干?,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我想写一个存储过程 create proc GetTrunk @trunk int, @tableName sysname, @trunksize int = 5000 as with t as ( select PK1, PK2, ntile(@trunksize) over ( order by PK1, PK2 ) t from ABigTable -- Just put table name directly here for

我想写一个存储过程

create proc GetTrunk @trunk int, @tableName sysname, @trunksize int = 5000
as
with    t as ( 
           select PK1, PK2, ntile(@trunksize) over ( order by PK1, PK2 ) t
           from     ABigTable -- Just put table name directly here for testing
 -- the table has a composite pk of pk1 and pk2
         )
select  pk1, pk2
from    t
where   t = @trunk;
运行gettrunk3,'tname',5000将返回将表切片为5000大小的主干,并获取主干主键的第三个主干

然而,对于大桌子来说,速度非常慢。这是一种更好的获取表格窗口的方法吗?

您可以试试。大概是这样的:

create proc GetTrunk @trunk int, @tableName sysname, @trunksize int = 5000
as

           select PK1, PK2
           from     ABigTable 
           order by PK1, PK2 OFFSET ((@trunk -1) * @trunksize)  ROWS 
    FETCH NEXT @trunksize ROWS ONLY 

我认为它的性能会比NTILE好。

您可能想看看分页技术。您通常会使用类似select top 5000 where PK>lastkey的方法,使用键而不是主干的索引。这非常快。您可能想看看Paul White关于分页的文章:,。对于非常大的表来说,这仍然非常慢。我只需要向前读,所以我转向使用游标。