如果您有一个有用的索引,您可以通过跟踪基于索引的值一次抓取 10000 行。
假设有用的索引是 LastName + FirstName
Select top 10000 column_list from MyTable
order by LastName, FirstName
然后当你得到接下来的 10000 行时,使用查询
Select top 10000 column_list from MyTable
where LastName >= PreviousLastname && FirstName > PreviousFirstname
order by LastName, FirstName
上面的伪代码假设组合没有重复,如果你可以有重复,最简单的方法是添加另一列(即使没有索引),这使得它是唯一的。您将需要 order by 子句中的第三列。
PreviousLastname 是上一个查询的 10,000 条记录中的值。
添加
在这种情况下,一个有用的索引是任何具有高基数的索引——主要是不同的值或至多是最少数量的非不同值。一个非常无用的索引可能是性别(M/F/null)
由于您将其用于数据加载,因此索引选择并不重要(忽略性能考虑),只要它具有高基数即可。请注意,index 和 order by 子句必须匹配,否则会给数据库带来沉重的负担。
修订——我看到附加数据 where 子句的明显错误
where LastName >= PreviousLastname && FirstName > PreviousFirstname
这应该是
where (LastName > PreviousLastname)
or (LastName = PreviousLastname && FirstName > PreviousFirstname)