求sql”高效“分页及其原理

虎虎0369 2011-01-29 01:05:00
如题:以前我的分页都是用的select top 10 * from 表 where id not in (select top 10 id from 表)这种方式来分的页,今天我一个同事突然看见提醒我如果有几千几万条数据 那执行时会先把子查询中所有的id查出来 这样性能不是很好 我列了几个分页方法:
1 采用top 方法分页
2 采用row_number方式
3 这是我同事的方式(c#代码): SqlDataAdapter adapter = new SqlDataAdapter(command, conn);
adapter.Fill(ds, index, pageSize, "ds"); (个人觉得这个方法应该和2方法最后执行原理一样)


请大家说哈sql查询语句的执行顺序 :
比如select * from (select row_number() over(order by getdate()) as i,* from 表 where i between 10 and 20)
where条件是在所有的数据筛选完了再进行选择的吗 那样效率肯定低了
...全文
294 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2011-01-30
  • 打赏
  • 举报
回复
刚刚比较过:
http://blog.csdn.net/sz_haitao/archive/2011/01/10/6127571.aspx

看执行计划,多次top倒腾法、row_number()法 是一样的开销,
但是实际情况,跳过的记录数越多,top倒腾的就慢得越厉害
Rotel-刘志东 2011-01-29
  • 打赏
  • 举报
回复
看执行效率的sql server2005 row_number() over(order by column) as 'alias'
王向飞 2011-01-29
  • 打赏
  • 举报
回复
一种是数据库级别的分页,一种是程序级的分页。2005版本数据库分页推荐采用row_number
AcHerat 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 min565220 的回复:]
大家看哈我这个分页怎么样:
select * from
(
select row_number() over(order by avg(price)) as i,roleId,min(id) as Id,avg(price) as AvgPrice
from Tb_ComputerProductInfo
where typeid=3
group by roleId ) as t……
[/Quote]

举一反三,很好!
虎虎0369 2011-01-29
  • 打赏
  • 举报
回复
大家看哈我这个分页怎么样:
select * from
(
select row_number() over(order by avg(price)) as i,roleId,min(id) as Id,avg(price) as AvgPrice
from Tb_ComputerProductInfo
where typeid=3
group by roleId ) as t where t.i between 10 and 20
AcHerat 2011-01-29
  • 打赏
  • 举报
回复
对于LZ用TOP和NOT IN的方法还有一个很大的漏洞!
多表的情况,比如说是两个表:A和B A的id是自增列,主键,唯一标识,如果B中有多条数据行和A中的某个id对应,即 A表id为一的在B表中有许多数据,两表联合查询分页的话,可能会出现丢失数据的情况。
feixianxxx 2011-01-29
  • 打赏
  • 举报
回复
原理简单来说 就是一次从服务器取的数据量大大减少,不分页一次从服务器拿出全部数据到客户端,相比之下 效率就高了。。
AcHerat 2011-01-29
  • 打赏
  • 举报
回复
个人觉得高效分页不要用TOP 、 NOT IN 之类的,数据量大了天慢!
有唯一标识了用 between .. and .. 没的话构造个。
叶子 2011-01-29
  • 打赏
  • 举报
回复
sql server 2000 单主键高效分页存储过程
http://www.cnblogs.com/nzperfect/archive/2009/06/14/1503237.html

sql server 高效分页
http://zhouwenjun.javaeye.com/blog/510091
rucypli 2011-01-29
  • 打赏
  • 举报
回复
看效率执行的最直接办法就是看执行时间

22,300

社区成员

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

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