为什么加了一个distinct,速度慢的无法忍受,请各位帮忙,谢谢!

liuvb 2004-05-05 07:44:57
下面是一个分页的存储过程,为什么加了一个distinct,速度慢的无法忍受,如果不加distinct速度挺快,就是有很多得复数据,所以必须加。请各位帮忙。谢谢了。
CREATE PROC myx_prPageRecordset1
@queryStr nvarchar(1000),
@keyField nvarchar (200),
@pageSize int,
@pageNumber int
AS
BEGIN
DECLARE @sqlText AS nvarchar(4000)
DECLARE @sqlTable AS nvarchar(4000)
SET @sqlTable = 'SELECT DISTINCT TOP ' + CAST((@pageNumber + 1) * @pageSize AS varchar(30)) + ' ' + @queryStr
SET @sqlText =
'SELECT TOP ' + CAST(@pageSize AS varchar(30)) + ' * ' +
'FROM (' + @sqlTable + ') AS tableA ' +
'WHERE ' + @keyField + ' NOT IN(SELECT TOP ' +
CAST(@pageNumber * @pageSize AS varchar(30)) + ' ' + @keyField +
' FROM (' + @sqlTable + ') AS tableB)'
EXEC (@sqlText)
END
GO
...全文
1091 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-05-05
  • 打赏
  • 举报
回复
distinct 相当于 group by + order by 怎么改也快不了,换方法吧.
liuvb 2004-05-05
  • 打赏
  • 举报
回复
如果不要disticnct,有很多重复数据,请各位帮忙。多谢了,很着急。
各位能帮我改一下上面那个存储过程吗?多谢
8992026 2004-05-05
  • 打赏
  • 举报
回复
distinct的速度是慢的,想办法避免
zjcxc 元老 2004-05-05
  • 打赏
  • 举报
回复
按种方法试试

/*--分页方法:

回复人: j9988(j9988)
--*/


declare @sqlstr nvarchar(4000), --查询字符串
@pagecount int, --第N页
@pagesize int --每页行数

select @pagecount=3,@pagesize=10
,@sqlstr='select * from sysobjects'

set nocount on
declare @P1 int, --P1是游标的id
@rowcount int

exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
set @pagecount=(@pagecount-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@pagecount,@pagesize
exec sp_cursorclose @P1

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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