Tsql SQL限制查询
我在限制SQL查询方面遇到了问题。我使用的是SQL 2000,所以我不能使用任何函数,如行数、CTE或偏移量行提取 我尝试了Select TOP limit*FROM方法并排除了已经显示的结果,但这种方法查询速度太慢,因为有时我的结果查询会获取10000多条记录 我还尝试了以下方法:Tsql SQL限制查询,tsql,sql-server-2000,Tsql,Sql Server 2000,我在限制SQL查询方面遇到了问题。我使用的是SQL 2000,所以我不能使用任何函数,如行数、CTE或偏移量行提取 我尝试了Select TOP limit*FROM方法并排除了已经显示的结果,但这种方法查询速度太慢,因为有时我的结果查询会获取10000多条记录 我还尝试了以下方法: SELECT * FROM ( SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image , ( SELECT count(DISTINCT i
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的子查询中添加订单选项。我已经将这两个解决方案都放在存储过程中,但查询执行仍然很慢
所以我的问题是:
在SQL 2000中,有没有一种有效的方法可以将查询限制为每页拉取20条记录,以获取超过10000条的大量数据
谢谢 就查询而言,没有好的执行方式。如果性能非常关键,并且数据总是分组/排序相同,则可以添加一个int列,并根据分组/排序按触发器设置值。索引它,它应该是非常快的阅读;写入速度会慢一点
另外,确保在image和images的Id列上有索引。现在子查询只运行一次 如果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
10000条记录的数量不应该很大,当然也不应该很大,请检查您的索引。如果分页是问题,也可以考虑使用游标。表中有多少数据?Rowcount?image表有超过1300000条记录:通过添加过滤器,有时我会提取大约40000条记录可能的重复项我不明白为什么要选择前100%的记录?这能实现什么?获取数据间隔的一种方法是在子查询中选择前15位,然后在外部查询中颠倒顺序并选择前10位,这将为您提供原始顺序的5-15条记录。