语句优化

taoistong 2009-06-12 10:46:04
SELECT TOP 20 * FROM [VW_SYS_TASKS_MYPROCESSED]
WHERE [TASK_ID ]<(
SELECT MIN([TASK_ID ])
FROM (
SELECT TOP 800 [TASK_ID ]
FROM [VW_SYS_TASKS_MYPROCESSED]
where (PRC_ProcUser=N'hwtong'
)
ORDER BY [TASK_ID ] DESC) AS tblTmp
)
AND (PRC_ProcUser=N'hwtong')
ORDER BY [TASK_ID ] DESC


本语句是个SQL2000的分页的语句。每页20条,取的是第41页,效率低下
由于是拼接字符串的。希望用一句话写出来。
希望有人帮忙。就50分了 , 还希望有人帮忙
...全文
39 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taoistong 的回复:]
引用 5 楼 fredrickhu 的回复:
引用 4 楼 qizhengsheng 的回复:
用老大的那个分页套套好了


..



老大的分页在哪里?
[/Quote]

http://blog.csdn.net/zjcxc/category/125592.aspx
taoistong 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]
引用 4 楼 qizhengsheng 的回复:
用老大的那个分页套套好了


..
[/Quote]

老大的分页在哪里?
taoistong 2009-06-12
  • 打赏
  • 举报
回复
没有找到答案 继续关注中
htl258_Tony 2009-06-12
  • 打赏
  • 举报
回复
这个查询除了索引优化,几乎没什么可优化的了。
ztx1992 2009-06-12
  • 打赏
  • 举报
回复
CREATE TABLE test(id int,name char(1))

GO

DECLARE @string varchar(26)
DECLARE @count int,@length int
SET @string='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SET @length=len(@string)
SET @count=1
while(@count<=@length)
begin
insert into test values (@count,substring(@string,@count,1))
SET @count=@count+1
end

--第2页 每页3条

DECLARE @pageindex int,@pagesize int
SET @pageindex=2
SET @pagesize=3
DECLARE @page int
SET @page=(@pageindex-1)*@pagesize
select top 3 * from test
where id not in (select top (@pagesize) id from test)
JonasFeng 2009-06-12
  • 打赏
  • 举报
回复
SELECT TOP  20 *  FROM [VW_SYS_TASKS_MYPROCESSED] 
WHERE [TASK_ID ] <(
SELECT MIN([TASK_ID ])
FROM
(SELECT TOP 800 [TASK_ID]
FROM [VW_SYS_TASKS_MYPROCESSED]
where PRC_ProcUser=N'hwtong') AS TBLTMP
)
AND (PRC_ProcUser=N'hwtong')
ORDER BY [TASK_ID ] DESC


楼主要在TASK_ID 上加上索引,效率不会太差的。
--小F-- 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qizhengsheng 的回复:]
用老大的那个分页套套好了
[/Quote]
..
qizhengsheng 2009-06-12
  • 打赏
  • 举报
回复
用老大的那个分页套套好了
sdhdy 2009-06-12
  • 打赏
  • 举报
回复
楼主的这段代码感觉是从后往前分页。
ks_reny 2009-06-12
  • 打赏
  • 举报
回复

SELECT MIN([TASK_ID ])
FROM (
SELECT TOP 800 [TASK_ID ]
FROM [VW_SYS_TASKS_MYPROCESSED]
where (PRC_ProcUser=N'hwtong'
)
ORDER BY [TASK_ID ] DESC
這段代碼怪怪的,找最小的用min了,怎麼還要order by?
taoistong 2009-06-12
  • 打赏
  • 举报
回复
SF自己做
ghost1107 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 GRANDTREE 的回复:]
可以使用identity列

declare @tempTable
(ID int identity,TaskId varchar(50))
Insert into @tempTable
(TaskId)
SELECT TOP 800 [TASK_ID ]
FROM [VW_SYS_TASKS_MYPROCESSED]
where (PRC_ProcUser=N'hwtong'

select * from [VW_SYS_TASKS_MYPROCESSED] a
inner join @tempTable b
on a.TaskId=b.TaskId
where a.Id between 781 and 800

如果数据量大的话使用#tempTable
[/Quote]
武哥博文 2009-06-12
  • 打赏
  • 举报
回复
可以使用identity列

declare @tempTable
(ID int identity,TaskId varchar(50))
Insert into @tempTable
(TaskId)
SELECT TOP 800 [TASK_ID ]
FROM [VW_SYS_TASKS_MYPROCESSED]
where (PRC_ProcUser=N'hwtong'

select * from [VW_SYS_TASKS_MYPROCESSED] a
inner join @tempTable b
on a.TaskId=b.TaskId
where a.Id between 781 and 800

如果数据量大的话使用#tempTable

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧