我遇到限制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条记录吗?
感谢。
答案 0 :(得分:0)
查询方面,没有很好的表现方式。如果性能至关重要且数据总是按相同的顺序进行分组/排序,则可以添加一个int列,并根据分组/排序按触发器设置值。对它进行索引,读取速度应该非常快;写入会慢一些。
另外,请确保在图像和图像上的Id列上有索引。
答案 1 :(得分: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