选择SQL Server 2008中的批处理行
我尝试检索一批行,并使用row_number函数实现了这一点,例如检索前10000行,如下所示:选择SQL Server 2008中的批处理行,sql,sql-server,sql-server-2008,sqlperformance,Sql,Sql Server,Sql Server 2008,Sqlperformance,我尝试检索一批行,并使用row_number函数实现了这一点,例如检索前10000行,如下所示: select * from (select row_number() over (order by id) as row_num, * from forms) as batch where batch.row_num between 1 and 10000 这在第一批中执行得很好,但当它达到较高的行数时会逐渐变慢,并且我正在
select *
from
(select
row_number() over (order by id) as row_num, *
from
forms) as batch
where
batch.row_num between 1 and 10000
这在第一批中执行得很好,但当它达到较高的行数时会逐渐变慢,并且我正在使用的一个表的行数超过270万行
有什么方法可以通过线性性能实现这一点吗
主键列上有一个聚集索引,其他一些列上有5个非唯一、非聚集索引。我正在按顺序处理整个表,目前选择10000作为批量大小。1-10000查询只需要不到一秒钟的时间,但是,例如,200000-210000查询只需要10秒钟,而当它以百万计时,它就超过了1分钟 记住上一批中的最大id并执行以下操作
SELECT top 10000 ...
WHERE id > @maxid
ORDER BY id
或者,您可以使用有效地按顺序块处理表。或者记住上一批中的最大id并执行
SELECT top 10000 ...
WHERE id > @maxid
ORDER BY id
或者,您可以使用来高效地按顺序块处理表。索引在以下情况下无效: 一,。这些东西太多了 二,。当表的规格化不好时 根据经验: 一,。保持索引的间隔,每个表3-5个或更少 二,。如有必要,将表格规格化为第三种形式。一个规范化良好的表处理了要应用的索引的适当数量。列和空/重复值越小,性能越好。关于规范化的众多参考文献之一:
另一种技术是对表进行集群,这意味着将记录拆分为多组表。每个表将保留不到一百万行的数据,就像归档一样。当然,查询/添加每个表将是另一回事。索引在以下情况下变得无用: 一,。这些东西太多了 二,。当表的规格化不好时 根据经验: 一,。保持索引的间隔,每个表3-5个或更少 二,。如有必要,将表格规格化为第三种形式。一个规范化良好的表处理了要应用的索引的适当数量。列和空/重复值越小,性能越好。关于规范化的众多参考文献之一:
另一种技术是对表进行集群,这意味着将记录拆分为多组表。每个表将保留不到一百万行的数据,就像归档一样。当然,查询/添加每个表将是另一回事。表上有哪些索引?用例是什么?按顺序分批处理整个表或寻找任意批次?主键列上有一个聚集索引,其他一些列上有5个非唯一、非聚集索引。我正在按顺序处理整个表,目前选择10000作为批量大小。1-10000查询只需不到一秒钟,但是,例如,200000-210000查询只需10秒钟,当它以百万计时,它已超过1分钟。表中有哪些索引?用例是什么?按顺序分批处理整个表或寻找任意批次?主键列上有一个聚集索引,其他一些列上有5个非唯一、非聚集索引。我正在按顺序处理整个表,目前选择10000作为批量大小。1-10000查询只需要不到一秒钟的时间,但是,例如,200000-210000查询只需要10秒钟,而当它以百万计时,它就超过了1分钟。