为什么加了一个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
...全文
532 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-05-05 07:44
社区公告
暂无公告