mysql 存储过程高效分页方法

Create procedure [dbo].[PrGs_Nation_Task_GetList]
@PageSize int = 100, -- 每页显示记录条数,默认为100
@PageIndex int = 1, -- 当前提取要显示的页码,默认为1,数据库根据PageSize,PageIndex 计算返回一页数据
@RetTotal int output, -- 记录总数
@RetCount int output, -- 返回记录数
@RetPageIndex int output, -- 输出当前页码
@ReturnDesc varchar(128) output -- 返回操作结果描述
as
begin
set nocount on
set xact_abort on
set @RetTotal = 0
set @RetCount = 0
set @RetPageIndex = @PageIndex

-- 多条件取值
declare @Err int -- 错误
declare @PageCount int -- 总页数
declare @BeginRID int -- 开始行 Rid
declare @MaxRow int -- 最后行
select @RetTotal = count(*)
from NationTask
select @Err = @@ERROR
if @Err <> 0
begin
set @ReturnDesc = '提取国家任务总数失败!'
return -1
end
-- 如果无数据, 则返回空结果集
if @RetTotal = 0
begin
set @ReturnDesc = '当前条件无国家任务记录!'
return 1
end
-- 计算总页数
set @PageCount = @RetTotal / @PageSize
if @RetTotal % @PageSize > 0
begin
set @PageCount = @PageCount + 1
end
-- 超过总页数,则返回空结果集
if @PageIndex > @PageCount
begin
set @ReturnDesc = '当前条件无国家任务记录!'
return 1
end
-- 获取 要返回页面的 第一行纪录的 Rid
set @MaxRow = @PageSize * (@PageIndex - 1) + 1
set rowcount @MaxRow
select @BeginRID = Rid
from NationTask
order by Rid desc

-- 返回数据列表
set rowcount @PageSize
select Rid
,TaskName
,TaskTitle
,ImageID
,EffectID
,StartTime
from NationTask
where Rid <= @BeginRID
order by Rid desc
set @RetCount = @@rowcount
-- 结束
set @ReturnDesc = '提取国家任务列表成功!'
return 1
end

时间: 2024-08-01 03:49:00

mysql 存储过程高效分页方法的相关文章

MySQL存储过程的异常处理方法_Mysql

本文实例讲述了MySQL存储过程的异常处理方法.分享给大家供大家参考.具体如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE myProc -> (p_first_name VARCHAR(30), -> p_last_name VARCHAR(30), -> p_city VARCHAR(30), -> p_description VARCHAR(30), -> OUT p_sq

Linq配合AspNetPager高效分页方法

Linq配合AspNetPager高效分页方法   分页方式: 获取数据总条数: var Count = db.XXX.Count();   如果要是以往的写法还得写 select count(*) from XXXX; 还得调用SQLHelper.cs类里面的方法才行,现在就这么一句话就搞定--  汗额.. 再使用Skip()和Take()方法进行分页   说明:Skip()跳过集合的前n个元素:延迟.即我们跳过给定的数目返回后面的结果集. 说明:Take()获取集合的前n个元素:延迟.即只返

mysql实现高效分页

mysql实现高效分页 http://www.itjhwd.com/mysqlgaoxiao/ 说的不错

asp.net结合mysql存储过程进行分页代码

最近用mysql+asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 不过在网上找了一些,发现都有一个特点--就是不能传出总记录数,干脆自己研究吧.终于,算是搞出来了,效率可能不是很好,但是我也觉得不错了.贴代码吧直接:也算是对自己学习mysql的一个记录. CREATE PROCEDURE p_pageList ( m_pageNo int , m_perPageCnt int , m_column varchar(1000) , m_tab

asp.net 结合mysql存储过程进行分页代码_实用技巧

不过在网上找了一些,发现都有一个特点--就是不能传出总记录数,干脆自己研究吧.终于,算是搞出来了,效率可能不是很好,但是我也觉得不错了.贴代码吧直接:也算是对自己学习mysql的一个记录. 复制代码 代码如下: CREATE PROCEDURE p_pageList ( m_pageNo int , m_perPageCnt int , m_column varchar(1000) , m_table varchar(1000) , m_condition varchar(1000), m_or

GridView高效分页和搜索功能的实现代码_实用技巧

前言:         公司项目开发,上周的任务是做基础数据的管理.在Sharepoint2010里边内嵌asp.net的aspx页,遇到了各种各样奇葩的问题,因为之前对sharepoint只是有一些了解,但是没有设计到具体的编程工作,这一次算是初次接触吧.其中有一部分基础数据数据量很大,大致有十多万,因为是对基础数据的维护,所以还需要对数据进行列表展示,增删改查什么的,大家都知道Asp.net里边的GridView有自带的分页,但是,那个分页对于少量的数据还好,对于这种数十万的数据量而言,这种

MySQL分页技术、6种分页方法总结

  这篇文章主要介绍了MySQL分页技术.6种分页方法总结,本文总结了6种分页的方法并分别一一讲解它们的特点,需要的朋友可以参考下 概述 有朋友问: MySQL的分页似乎一直是个问题,有什么优化方法吗? 网上看到赶集网XX推荐了一些分页方法,但似乎不太可行,你能点评一下吗? 方法总结 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描

实例解析MySQL中的存储过程及存储过程的调用方法_Mysql

mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快. 存储过程与mysql相当于shell和linux系统.如果你是程序员的话,那我告诉你存储过程实际上是一个方法,你只要调用这个方法,并且输入它设置好的参数就可以获取或者执行你想要的操作了. 看了如下存储过程实例,你会发现mysql存储过程和shell很像. 下面存储过程内容为:调用存储过程,并且传入用户名,密码参数.存储过程会将这她们存储到process_test表里面.看实例 一,

MySQL高效分页与分页优化分析

在Percona Performance Conference 2009大会上来自yahoo的Surat Singh Bhati (surat@yahoo-inc.com) 和 Rick James (rjames@yahoo-inc.com)给大家分享了MySQL高效分页的经验. 一.概述 常见分页方式 schema设计和常见的分页方式(偏移) 避免分页偏移过大的技巧 性能对比 重点 二.常见分页方式 三.前提 大记录表要高效分页 WHERE条件使用索引完成 WHERE条件和排序能够使用同个索