2

我遇到了限制 SQL 查询的问题。我使用的是 SQL 2000,所以我不能使用任何函数,如ROW_NUMBER(),CTE OR OFFSET_ROW FETCH.

我已经尝试过这种Select TOP limit * FROM方法并排除了已经显示的结果,但是这样查询非常慢,因为有时我的结果查询会获取超过 10000 条记录。

我也尝试了以下方法:

SELECT * FROM (
 SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image ,  
 ( SELECT count(DISTINCT i.id) FROM image WHERE i.id<= im.id ) AS recordnum 
 FROM images AS im 
 order by im.location asc, im.name asc) as tmp 
 WHERE recordnum between 5 AND 15 

这里有同样的问题加上问题,因为我无法在记录 um 的子查询中添加 ORDER 选项。我已将这两种解决方案都放在存储过程中,但查询执行仍然很慢。

所以我的问题是:有没有一种有效的方法来限制查询在 SQL 2000 中为大量数据(即超过 10000 条)每页提取 20 条记录?

谢谢。

4

2 回答 2

0

现在子查询仅
在 im2.id 为 null 的情况下运行一次,将跳过前 40 行

SELECT top 25 im1.* 
FROM images im1 
left join ( select top 40 id from images order by id ) im2
on im1.id = im2.id
where im2.id is null
order by im1.id
于 2013-01-25T15:27:51.553 回答
0

查询方面,没有很好的执行方式。如果性能至关重要并且数据将始终按相同的方式分组/排序,则可以添加一个 int 列并根据分组/排序通过触发器设置值。索引它,读取速度应该非常快;写入会慢一些。

此外,请确保您在 image 和 images 的 Id 列上有索引。

于 2013-01-25T13:34:55.033 回答