1

我有一个需要吸收整个 MS SQL 数据库的系统。目前它这样做是这样的:

select top 1000 from table where id > 0 order by id;

然后,对于下一个块:

select top 1000 from table where id > 1000 order by id;

进而:

select top 1000 from table where id > 2000 order by id;

等等。

在 MySQL 中,我了解到做LIMITOFFSET查询非常慢,因为数据库必须首先对结果进行排序,然后扫描OFFSETcount。当该计数变大时,随着读取计数猛增,生活开始变得糟糕。

我的问题是:同样的问题是否适用于TOP?换句话说,当我在一个有 10,000,000 条记录的数据库上运行这些查询时,我是否可以期待一个非常高的读取计数id > 9,999,000?如果是这样,有什么方法可以更好地处理这个问题?

4

1 回答 1

3

如果对 ID 进行索引,将会非常快。如果该列没有被索引,那么它会发生全表扫描。

我还建议以下几点:

  select * from table where id > 0 and id <= 1000 order by id ;

这样,如果您没有所有记录,您就没有错误(重复)。

于 2012-08-14T00:11:32.187 回答