gpt4 book ai didi

sql - 一次只获取部分结果集?

转载 作者:行者123 更新时间:2023-12-02 01:55:59 25 4
gpt4 key购买 nike

我正在使用我的查询获取大约 500 万行(10-15 列)的巨大结果集。没有 ID 列,甚至无法创建(不是我的错),所以我什至无法根据 ID 对数据进行分区,然后分段加载。更糟糕的是,这是 SQL Server 2000,因此大多数方便的 SQL 编码功能甚至可能无法用于此数据库。有什么办法我可以做类似的事情 -

Select top 10000 column_list from myTable
then, select next top 10000 column_list from myTable (ie 10001 to 20000)
and so on...

最佳答案

如果你有一个有用的索引,你可以通过跟踪基于索引的值一次抓取 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 子句中的第 3 列。

PreviousLastname 是前一个查询的 10,000 条记录中的值。

已添加

在这种情况下,一个有用的索引是任何具有高基数的索引——主要是不同的值,或者至多是最小数量的非不同值。一个非常无用的索引会像性别(M/F/null)

由于您使用它来加载数据,因此索引选择并不重要(忽略性能方面的考虑),只要它具有高基数即可。请注意,index 和 order by 子句必须匹配,否则会给数据库带来沉重的负载。

修正——我发现附加数据 where 子句有一个明显的错误

where LastName >= PreviousLastname && FirstName > PreviousFirstname

这应该是

where (LastName > PreviousLastname) 
or (LastName = PreviousLastname && FirstName > PreviousFirstname)

关于sql - 一次只获取部分结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com