请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 407|回复: 15

[mysql] 三种SQL分页法效率分析

[复制链接]

607

主题

604

帖子

1909

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1909
发表于 2016-2-21 22:41:49 | 显示全部楼层 |阅读模式

表中主键必须为标识列,[ID] int IDENTITY (1,1)

1.分页方案一:(利用Not In和SELECT TOP分页)

语句形式:

SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID
SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id))
ORDER BY ID

2.分页方案二:(利用ID大于多少和SELECT TOP分页)

语句形式:

SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID
SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID

3.分页方案三:(利用SQL的游标存储过程分页)

create procedure SqlPager
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:

分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句

分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用


想要了解更多更全面的web前段知识,css样式,html教程,数据库教程,word教程,excel教程等等,就到excel学习网www.excelxue.com


回复

使用道具 举报

0

主题

843

帖子

6

积分

注册会员

Rank: 2

积分
6
发表于 2016-3-10 13:08:52 | 显示全部楼层
太给力啊 跪谢啊
回复 支持 反对

使用道具 举报

0

主题

704

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2016-3-18 11:15:10 | 显示全部楼层
还有许多问题不明白,有点恼火啊!
回复 支持 反对

使用道具 举报

0

主题

704

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2016-3-19 22:43:57 | 显示全部楼层
一下子解决了我工作当中的难题,谢谢楼主,非常感谢!
回复 支持 反对

使用道具 举报

0

主题

864

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2016-3-23 14:45:20 | 显示全部楼层
这个资料非常不错,好东东!
回复 支持 反对

使用道具 举报

4

主题

1005

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2016-3-23 20:26:04 | 显示全部楼层
太给力啊 跪谢啊
回复 支持 反对

使用道具 举报

2

主题

920

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2016-3-26 22:33:45 | 显示全部楼层
这个资料非常不错,好东东!
回复 支持 反对

使用道具 举报

1

主题

886

帖子

5

积分

注册会员

Rank: 2

积分
5
发表于 2016-3-27 17:25:11 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

1

主题

1042

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2016-4-12 13:56:50 | 显示全部楼层
学习贵在坚持哦
回复 支持 反对

使用道具 举报

0

主题

704

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2016-4-15 17:19:48 | 显示全部楼层
楼主不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-21 01:32 , Processed in 0.215970 second(s), 30 queries .

快速回复 返回顶部 返回列表