- 浏览: 63331 次
- 性别:
- 来自: 烟台
最新评论
有些控件自身带的分页功能,例如gridview或webgrid等等,表面上看达到了分页,实际属于假分页,每翻一页都需要加载全部数据,利用aspnetpager和分页存储过程结合来用效果更佳。
最简单的分页是利用SqlDataAdapetr,如下:
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, pStartRecord, pMaxRecord, "pDataTable");
最后返回dataset即可, 至于"pDataTable"名字任意起,无所谓。
pStartRecord(每页的开始):mypage.PageSize * (mypage.CurrentPageIndex - 1),
pMaxRecord(每页的结束):mypage.PageSize
【SQL】千万级数据库高速分页显示
/*
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:
exec GetRecordFromPage news,newsid,10,100000
news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。
*/
/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
作 者: 铁拳
邮 箱: unjianhua_kki@sina.com">sunjianhua_kki@sina.com
创建时间: 2004-07-04
修改时间: 2004-07-04
*/
Create PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 关键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)
//牛腩設計的分頁存儲過程
-- =============================================
-- Author: 牛腩
-- Create date: 2009-07-22 12:41
-- Description: 分页,用到了ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_ShowPage]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='', -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
@PageSize int = 10, -- 页尺寸,默认10
@PageIndex int = 1, -- 页码,默认1
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000)
if @strWhere !=''
set @strWhere=' where '+@strWhere
set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)
下面是調用的實例,可以采用join连接。
EXEC [proc_ShowPage]
@tblName = N'(project p inner join projectca ca on p.caid=ca.id)',
@strGetFields = N'p.title,ca.caname',
@strOrder = N'p.id',
@strOrderType = N'desc',
@PageSize = 12,
@PageIndex = 1,
@strWhere = N''
//不能加条件的存储过程
create PROCEDURE P_GetPagedOrders2005
@tableName varchar(200), --表名
@strGetFields varchar(1000)= '*', --所要返回的字段
--@strWhere varchar(1500) = '', --条件
@startIndex INT,
@pageSize INT
AS
with SClass as(
select row_number() over(order by SmallClass_ID) as rownumber,@strGetFields
from SmallClass )
/**上半句产生一个临时表,表名为Small_Class,其内容来自于自查询select row_number().......**/
select rownumber, SmallClass_ID,BigClass_ID,SmallClass_Name from SClass
where rownumber between (@startindex-1)*@pagesize and (@startindex-1)*@pagesize+(@pagesize-1)
//分页不限表的存储过程
create PROCEDURE ShowPage
(
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int , -- 页尺寸
@PageIndex int , -- 页码
@strWhere varchar(1500), -- 查询条件(注意: 不要加where)
@Sort varchar(255) --排序的方法
)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @Sort = 'desc'
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
end
else
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
end
--如果是第一页就执行以上代码,这样会加快执行速度
end
exec(@strSql)
return
exec ShowPage 'Small_Class','SmallClass_ID,SmallClass_Name,BigClass_ID','SmallClass_ID',3,3,null,null
最简单的分页是利用SqlDataAdapetr,如下:
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, pStartRecord, pMaxRecord, "pDataTable");
最后返回dataset即可, 至于"pDataTable"名字任意起,无所谓。
pStartRecord(每页的开始):mypage.PageSize * (mypage.CurrentPageIndex - 1),
pMaxRecord(每页的结束):mypage.PageSize
【SQL】千万级数据库高速分页显示
/*
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:
exec GetRecordFromPage news,newsid,10,100000
news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。
*/
/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
作 者: 铁拳
邮 箱: unjianhua_kki@sina.com">sunjianhua_kki@sina.com
创建时间: 2004-07-04
修改时间: 2004-07-04
*/
Create PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 关键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)
//牛腩設計的分頁存儲過程
-- =============================================
-- Author: 牛腩
-- Create date: 2009-07-22 12:41
-- Description: 分页,用到了ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_ShowPage]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='', -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
@PageSize int = 10, -- 页尺寸,默认10
@PageIndex int = 1, -- 页码,默认1
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000)
if @strWhere !=''
set @strWhere=' where '+@strWhere
set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)
下面是調用的實例,可以采用join连接。
EXEC [proc_ShowPage]
@tblName = N'(project p inner join projectca ca on p.caid=ca.id)',
@strGetFields = N'p.title,ca.caname',
@strOrder = N'p.id',
@strOrderType = N'desc',
@PageSize = 12,
@PageIndex = 1,
@strWhere = N''
//不能加条件的存储过程
create PROCEDURE P_GetPagedOrders2005
@tableName varchar(200), --表名
@strGetFields varchar(1000)= '*', --所要返回的字段
--@strWhere varchar(1500) = '', --条件
@startIndex INT,
@pageSize INT
AS
with SClass as(
select row_number() over(order by SmallClass_ID) as rownumber,@strGetFields
from SmallClass )
/**上半句产生一个临时表,表名为Small_Class,其内容来自于自查询select row_number().......**/
select rownumber, SmallClass_ID,BigClass_ID,SmallClass_Name from SClass
where rownumber between (@startindex-1)*@pagesize and (@startindex-1)*@pagesize+(@pagesize-1)
//分页不限表的存储过程
create PROCEDURE ShowPage
(
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int , -- 页尺寸
@PageIndex int , -- 页码
@strWhere varchar(1500), -- 查询条件(注意: 不要加where)
@Sort varchar(255) --排序的方法
)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @Sort = 'desc'
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
end
else
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
end
--如果是第一页就执行以上代码,这样会加快执行速度
end
exec(@strSql)
return
exec ShowPage 'Small_Class','SmallClass_ID,SmallClass_Name,BigClass_ID','SmallClass_ID',3,3,null,null
发表评论
-
Sql疑难问题
2011-11-06 11:30 723select ROW_NUMBER() OVER(ORDER ... -
oracle重要的函数
2011-07-31 22:25 889oracle函数(单行) 1. nvl(x1,x2),x1和x ... -
MySql格式化字符串
2011-07-31 20:44 2010DATE_FORMA T(date, format) 根据格式 ... -
splite数据库学习心得
2011-03-19 18:23 1360这篇文章是看网友牛腩的文章后,提炼的精要笔记 1、到http ... -
在Oracle中實現類似自動增加ID的功能
2011-03-19 17:55 733創建序列 create sequence SEQ minv ... -
Sql的高级应用技巧
2011-03-16 21:38 784//獲取table表的列名 ,適用於SQl server ,對 ... -
intersect, minus(转载)
2011-03-16 21:27 594intersect, minus intersect运算:返回 ... -
临时表的概念
2011-03-16 21:26 747//SQL server 在創建表的時候添加了“#”首碼的表 ... -
标准的Oracle存储过程
2010-08-09 16:34 690为什么我说它标准呢?因为这个存储过程中包括了,游标的使用,fo ... -
Oracle分页存储过程
2010-08-09 15:29 1093首先在oracle中创建包,包可以比喻成篮子,存储过程好比是苹 ...
相关推荐
【JSP+MySQL分页组件】是Web开发中常见的功能,用于处理大量数据时提高页面加载速度和用户体验。在Web应用程序中,一次性加载所有数据可能导致页面响应慢,尤其是在数据库存储的数据量庞大的情况下。分页技术可以...
### ASP与MySQL分页技术详解 #### 一、引言 在Web开发中,当数据量庞大时,一次性展示所有数据不仅会导致页面加载缓慢,还会严重影响用户体验。因此,实现数据的分页显示变得尤为重要。本文将详细介绍如何在ASP...
本项目“easyUI+MySQL分页”旨在教你如何利用easyUI框架与MySQL数据库相结合,实现在Web页面上展示分页数据的效果。在这个过程中,我们将涉及到前端的JavaScript库easyUI,以及后端的MySQL数据库和可能用到的Java...
本资源"PHP MYSQL分页代码"提供了一个实用的解决方案,结合了PHP和MySQL两种技术来实现高效的数据分页功能。 首先,让我们深入了解PHP和MySQL在分页中的角色。PHP是一种广泛使用的服务器端脚本语言,常用于动态网站...
【标题】"基于hibernate_mysql分页通用源码"涉及的关键知识点主要集中在Java Web开发领域,特别是关于ORM框架Hibernate、关系型数据库MySQL、MVC框架Struts2以及分页技术的应用。以下是对这些核心概念的详细解释: ...
二、MySQL分页查询 在MySQL中,我们可以使用`LIMIT`和`OFFSET`关键字来实现分页。`LIMIT`用于指定每页显示的数据条数,`OFFSET`用于指定从哪一条记录开始取数据。例如,要获取第2页(每页5条数据)的信息,SQL语句...
这个"封装好的php+mysql分页类"提供了一种高效且可复用的方法来实现这一目标。以下是对该分页类的详细解析: 1. **类结构**: 分页类通常包含一些关键属性,如每页显示的记录数($limit)、当前页数($currentPage...
以下是一个简单的PHP+MySQL分页显示的示例代码: ```php // 数据库连接 $conn = mysql_connect("localhost", "root", ""); // 设置每页显示记录数 $pagesize = 10; // 获取总记录数 $rs = mysql_query("SELECT ...
### MySQL分页存储过程概述 分页存储过程是一种在数据库层面上实现数据分页的技术。相比应用程序级别的分页,它能更高效地处理数据,减少网络传输的数据量,提升系统性能。在MySQL中,我们可以通过创建存储过程来...
通过上述分析可以看出,这个MySQL分页存储过程实现了灵活且高效的分页查询功能。它不仅能够根据用户提供的参数动态地构建查询语句,还能够处理排序、分组等复杂需求。对于需要频繁进行分页查询的应用场景来说,这种...
### Struts2与MySQL分页实现详解 #### 一、背景与目的 随着Web应用的不断发展,用户对于信息展示的需求也越来越高。为了更好地管理和展示大量数据,分页技术成为了一个不可或缺的功能。本文将详细介绍如何利用...
总结来说,实现高效的MySQL分页查询需要考虑索引优化、使用新的SQL特性,以及借助合适的开发工具。同时,持续关注数据库性能监控,及时调整和优化查询策略,对于保持系统稳定和提升用户体验具有重要意义。
Mysql分页通用存储过程
接下来,我们将详细介绍PHP+MySQL分页的原理及实例应用。 首先,我们需要了解MySQL数据库中实现分页的核心SQL语句——LIMIT子句。在SQL语句中,LIMIT用于限制查询结果的数量,它接受一个或两个数字参数,表示从哪一...
在这个"mysql分页实例"中,我们将深入探讨MySQL的分页查询技术,并提供可以直接引用的分页类。 首先,我们要理解SQL中的基础分页查询语句。在MySQL中,最常用的分页查询方法是结合`LIMIT`和`OFFSET`关键字。`LIMIT`...
"mysql 分页源代码"这个主题就涉及到如何通过编程技术实现数据库查询的分页功能,以提高性能并提供良好的用户界面。这里我们将详细探讨使用JSP、JavaBean、JDBC以及MySQL进行分页的具体步骤和原理。 首先,JSP...
4. **MySQL分页工具** 在实际开发中,许多开发者会选择使用ORM(对象关系映射)框架,如Hibernate、MyBatis等,它们通常提供封装好的分页API,简化了数据库分页的操作。同时,也有一些数据库管理工具,如MySQL ...
到此这篇关于mysql分页的limit参数的文章就介绍到这了,更多相关mysql分页limit参数内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网! 您可能感兴趣的文章:详解MySQL的limit...
本示例中,我们将探讨如何在WinForm应用程序中实现MySQL数据库的分页功能,这在处理大量数据时非常实用,可以提高用户体验并减少系统资源的消耗。 首先,我们需要在Visual Studio 2010中创建一个新的WinForm项目。...
本主题“PHP+MYSQL分页代码”着重讲解如何在PHP后端和MySQL数据库配合下实现高效、实用的分页功能。下面我们将深入探讨相关知识点。 1. **SQL查询与LIMIT子句**: 在MySQL中,`LIMIT`子句用于在查询结果集中限制...