(转)几种常用存储过程分页方法
我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据
几种常用存储过程分页方法
TopN方法
select Top(@PageSize) from TableName where ID Not IN
(Select Top ((@PageIndex-1)*@PageSize) ID from Table Name where .... order by ... )
where .... order by ...
临时表
declare @indextable table(id int identity(1,1),nid int,PostUserName nvarchar(50))
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize--下限
set @PageUpperBound=@PageLowerBound+@pagesize--上限
set rowcount @PageUpperBound
insert into @indextable(nid,PostUserName) select ReplyID,PostUserName from TableName order by ......
select * from TableName p,@indextable t where p.ID=t.nid
and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
CTE--2005新语法,类似临时表,但是生命周期稍微不同,这里只是他的一个运用
with cte_temp--定义零时表,PageIndex是一个计算字段,储存了搜索结果的页号
As (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) as PageIndex,* from TableName where.....)
select * from cte_temp where pageindex=@pageindex-1;
结论:
TopN在小页数下最快,如果在10页以下,可以考虑用它,CTE和临时表时间很稳定,CTE消耗的时间比临时表多,但是不会引起tempdb的暴涨和IO增加
性能比较
试验环境:win2003server,Sqlserver2005,库大小2,567,245行,没有where子句,试验时每页大小50,页码作为变量
取0,3,10,31,100,316,1000,3162...页,也就是10的指数,试验结果如下
页数 | TopN | CTE | 临时表 | 临时表 | 老论坛存储过程 | CTE改进 |
1 | 3 | 12 | 10 | 101 | 457 | 7302 |
3 | 15 | 7 | 79 | 5524 | 464 | 7191 |
10 | 127 | 5504 | 88 | 3801 | 464 | 6116 |
32 | 588 | 9672 | 122 | 3601 | 976 | 7602 |
100 | 4680 | 9738 | 166 | 4235 | 486 | 7151 |
316 | 45271 | 9764 | 323 | 3867 | 522 | 7255 |
1000 | 无法计算 | 9806 | 869 | 2578 | 635 | 8948 |
3162 | 无法计算 | 9822 | 2485 | 4110 | 12460 | 8210 |
10000 | 无法计算 | 9754 | 7812 | 11926 | 14250 | 7359 |
31623 | 无法计算 | 9775 | 18729 | 33218 | 15249 | 7511 |
100000 | 无法计算 | 无法计算 | 31538 | 55569 | 17139 | 6124 |
数据解释和分析
临时表分为有没有缓存两种时间,CTE就是上面的方法,CTE改进只是把选入CTE临时表的列数减少了,只选取了页号和主键,Null表示时间无法计算(时间太长),数据单位是毫秒.
从上面的数据可以看到,TopN在前32页都是有优势的,但是页数增大后,性能降低很快,CTE改进比CTE有所进步,平均进步两秒左右,但是还是比临时表慢,但是考虑临时表会增大日志文件的大小,引起大量IO,CTE也就有他自己的优势,公司现在正在使用的存储过程效率不错,但是在页码靠后的情况下性能会降低
转载于:https://www.cnblogs.com/hongyuniu/archive/2008/05/23/1205833.html
(转)几种常用存储过程分页方法相关推荐
- 结合Scikit-learn介绍几种常用的特征选择方法
特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减 ...
- 异常数据4种剔除方法_数据分析系列 22/32 | 9种常用的数据分析方法
要使各种结构化的.非结构化的.海量的数据实现标准化.信息化,能够提供业务绩效评估.业务决策支持等要求,我们首先需要进行数据分析. 同时,围绕业务问题,采用合适的分析方法,分析模型,以及分析工具,这是数 ...
- python 卡方检验 特征选择_结合Scikit-learn介绍几种常用的特征选择方法
特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减 ...
- 几种常用的优化方法梯度下降法、牛顿法、)
几种常用的优化方法 1. 前言 熟悉机器学习的童鞋都知道,优化方法 ...
- 功能测试常用6种方法_16种常用的数据分析方法聚类分析
聚类(Clustering)就是一种寻找数据之间内在结构的技术.聚类把全体数据实例组织成一些相似组,而这些相似组被称作簇.处于相同簇中的数据实例彼此相同,处于不同簇中的实例彼此不同. 聚类分析定义 聚 ...
- lasso特征选择python_转:结合Scikit-learn介绍几种常用的特征选择方法-2
4.2 平均精确率减少 Mean decrease accuracy 另一种常用的特征选择方法就是直接度量每个特征对模型精确率的影响.主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率 ...
- 干货:结合Scikit-learn介绍几种常用的特征选择方法
原文:http://dataunion.org/14072.html 作者:Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮 ...
- 几种常用的差异分析方法简介
几种常用的差异分析方法简介 如今在生物学研究中,差异分析越来越普遍,也有许多做差异分析的方法可供选择.但是在实际应用中,大多数人不知道该使用哪种方法来处理自己的数据,所以今天我就来介绍下目前几种常用的 ...
- 归一化mysql函数_数据归一化和两种常用的归一化方法
数据归一化和两种常用的归一化方法 一.总结 一句话总结: min-max标准化:x* =(x-min)/(max-min):新数据加入,需重新计算max和min Z-score标准化:x* =(x-μ ...
最新文章
- Unity优化手机游戏学习教程
- Python数据清理终极指南(2020版)
- C++中的c_str()函数用法
- Java语言实现插值查找
- 【Python基础】为什么更改列表'y'也会更改列表'x'?
- Linux系统Logrotate服务介绍
- 轻博客\博客\微博对比
- 团队行为心理学读书笔记(3)领导力背后的行为心理学
- CSS 相对|绝对(relative/absolute)定位系列(三)
- 【JSON】FastJson 打印输格式化输出
- Linux里隐藏的计算器,你知道它的奥秘吗?
- openstack部署过程中问题记录
- 写, 读sdcard目录上的文件
- iOS开发之runtime的运用-获取当前网络状态
- 黄聪:Linq初级班 Linq To XML体验(编程篇)
- cad指示箭头快捷键命令_47个快捷键+50个CAD技巧助你玩转CAD
- Android Studio新建项目
- 3dmax学习笔记 (一)
- 利用selenium webdriver下载不同类型的文件(pdf,txt等等)
- 阿里的 P8 和 P9 到底是什么水平
热门文章
- python获取文件字节数_python关于文件操作中的字符个数和字节数
- datagridview滚动条自动滚动_微软新贡献:进一步优化Chromium的滚动特性
- node install.js 很长_余生很长,放下错的人,才能拥抱属于你的幸福。很唯美的心灵鸡汤...
- 计算机网络技术超文本,网络协议确定了计算机网络传递和管理信息的规范,其中HTTP属于()A、超文本传输协议B、传输控制协...
- yoyo跑_面对“跑腿服务坑”:悠悠跑腿、蜂鸟配送、快跑者,跑腿公司该何去何从?...
- html转换react native,React native HTML entities
- 简述tcp协议三报文握手过程_华为原理 | 传输层协议amp;交换转发原理
- vuecli打包后的dist目录无法访问_听说很多人都不会打包,教你Python实现前端自动化打包部署!...
- 新电脑怎么分盘_电脑新系统装了杀毒软件之后,原本非常流畅,怎么突然变卡了?...
- java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎