黑马程序员技术交流社区

标题: Sql分页询性能问题 [打印本页]

作者: HM刘磊    时间: 2013-4-15 01:57
标题: Sql分页询性能问题
本帖最后由 HM刘磊 于 2013-4-15 02:01 编辑


use SMSstudent
go
/*第一种分页方法 */
SELECT     TOP (5) studentID, studentName, nation, sex, birthday, classID, telephone, credithour, ru_date, address, pwd, remark
FROM         student
WHERE     (studentID NOT IN
                          (SELECT   distinct  TOP (5) studentID
                            FROM          student AS student_1
                            ORDER BY studentID DESC))
ORDER BY studentID desc
/*第二种分页方法*/
select studentID, studentName, nation, sex, birthday, classID, telephone, credithour, ru_date, address, pwd, remark from (
select (row_number() over(order by studentID desc) ) as IDa,* from student ) as ids where ids.ida>5 and ids.ida<=10

上面Sql代码都实现了查询指定条目行数据的功能,我想问在实际工作中一般用那种方法,
实际测试中哪个性能好?
作者: 许庭洲    时间: 2013-4-15 07:29
1. 在实现分页检索,排行榜等功能的时候,需要限制检索的结果集行数,不同的数据库系统对此的支持是不同的;
2。MSSQLServer:MSSQLServer中提供了TOP关键字用来返回结果集中的前N条记录;
3。在MSSQLServer2005中还可以使用窗口函数ROW_NUMBER()实现限制结果集行数;
4。Oracle中支持窗口函数ROW_NUMBER(),其用法和MSSQLServer2005中相同;
5。除了窗口函数ROW_NUMBER(), Oracle中还提供了更方便的rownum机制,Oracle为每个结果集都增加;了一个默认的表示行号的列,这个列的名称为rownum.
作者: wang346351    时间: 2013-4-15 08:48
实际项目中存储过程分页也用的比较多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2