如果有一个有用的索引,你可以通过跟踪基于该索引的值,一次抓取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是上一个查询的第10000条记录的值。
新增内容:
在这种情况下,有用的索引是具有高基数的任何索引--大多数是不同的值或最多是少量的非不同值。极其无用的索引将是像性别(M/F/null)这样的东西。
由于您将使用此数据进行数据加载,因此索引选择并不重要(忽略性能考虑),只要它具有高基数即可。请注意,索引和order by子句必须匹配,否则会给数据库带来沉重的负担。
修订--我发现了附加数据where子句中的一个明显错误。
where LastName >= PreviousLastname && FirstName > PreviousFirstname
这应该是:
where (LastName > PreviousLastname)
or (LastName = PreviousLastname && FirstName > PreviousFirstname)
Date
或者DateTime
列呢? - William