SQL Server 大数据量分页建议方案
简单的说就是这个
select top(20) * from(
select *, rowid = row_number() over(order by xxx) from tb with(nolock)
) data where rowid > 0
order by rowid
或者这样写
select * from(
select *, rowid = row_number() over(order by xxx) from tb with(nolock)
) data where rowid > 0 and rowid <= 20
以前有强调,对于这类查询,一定要使用下面这样的方式(或者类似的,主要就是先取出满足条件的主键),但从这个邮件看,大家还在使用前面的老方法
--推荐方法:
select * from tb with(nolock)
where 主键 in(
select 主键 from(
select 主键, rowid = row_number() over(order by xxx) from tb with(nolock)
) data where rowid > 0 and rowid <= 20
)
之前一下强调这样做的原因是性能,因为旧的方法,数据是在 ROW_NUMBER 的时候同时取的,也就是分页前,实际上是取了所有数据,只是最终只返回了一部分而已
现在新发现的问题是:
当表包含一些长度较大的字段,比如 xml, varchar/nvarchar(max),或者是长度几千的(比如邮件中的这个表就有几个是 8000的)
内存开销的评估可能会变得很恐怖,为查询分配的内存会达到一个很大的值,比如这个查询,内存的分配是 4.4G, 我们的服务器也就64G内存,10来个这样的查询并发就会导致服务器因为没有可用内存而无法响应后续的请求
所以衣大家特别注意,这个附件中的查询请安排相关的人员调整
附件有一个是之前调整的,那个更恐怖,按10G的内存
降低内存开销主要是在 ORDER BY,包括 ROW_NUMBER 这种有 ORDER BY 操作的排名函数使用时,尽量在在查询的列中中排除掉无关列,特别是 xml, nvarchar/varchar 这种长度较长的列(不管这些列是否包含数据,只要定义够长就应该避免;内存评估是根据结构,不是根据实际存储的数据)
SQL Server 大数据量分页建议方案的更多相关文章
- [转]Sql server 大数据量分页存储过程效率测试附代码
本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...
- C# & SQL Server大数据量插入方式对比
以下内容大部分来自: http://blog.csdn.net/tjvictor/article/details/4360030 部分内容出自互联网,实验结果为亲测. 最近自己开发一个向数据库中插入大 ...
- SQL优化-大数据量分页优化
百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ...
- SQL Server 大数据量insert into xx select慢的解决方案
最近项目有个需求,把一张表中的数据根据一定条件增删改到另外一张表.按理说这是个很简单的SQL.可是在实际过程中却出现了超级长时间的执行过程. 后来经过排查发现是大数据量insert into xx s ...
- SQL Server 大数据量批量插入
private void AddShuJu_Click(object sender, RoutedEventArgs e) { Stopwatch wath = new Stopwatch(); wa ...
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
- PGIS大数据量点位显示方案
PGIS大数据量点位显示方案 问题描述 PGIS在地图上显示点位信息时,随点位数量的增加浏览器响应速度会逐渐变慢,当同时显示上千个点时浏览器会变得非常缓慢,以下是进行的测试: 测试环境: 服务器: C ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- MySQL大数据量分页查询
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
随机推荐
- ios LoadView 方法
当ViewController中的View不通过nib文件而是自己来创建的时候需要重载LoadView方法.否则不需要重载LoadView方法.
- Java线程问题分析定位
Java线程问题分析定位 分析步骤: 1.使用top命令查看系统资源占用情况,发现Java进程占用大量CPU资源,PID为11572: 2.显示进程详细列表命令:ps -mp 11572 -o THR ...
- Python 3.6.0的sqlite3模块无法执行VACUUM语句
Python 3.6.0的sqlite3模块存在一个bug(见issue 29003),无法执行VACUUM语句. 一执行就出现异常: Traceback (most recent call last ...
- uitableview性能优化(转)
这个感觉写的很好 收藏一下 以备后用 转自 http://www.cnblogs.com/pengyingh/articles/2354714.html 在iOS应用中,UITableView应该是使 ...
- Node.js intro
1. require() load module http://stackoverflow.com/questions/9901082/what-is-this-javascript-require ...
- sizeof 跟 strlen 的区别
1.参数 sizeof是c/c++ 中的一个操作符,其作用是返回对象或数据类型所占的内存字节数. 用法:sizeof(对象).sizeof 对象.sizeof(类型) 如果类型做参数,返回的是该类型所 ...
- 郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(二)kmeans
(上接第二章) 4.3.1 KMeans 算法流程 算法的过程如下: (1)从N个数据文档随机选取K个文档作为质心 (2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类 (3)重新计 ...
- Unity3D中以任意格式获取时间(C# .net也可用)
最近楼主在开发中遇到了一个小问题 需要保存截图,同时把时间作为截图的名字存储 时间的保存格式为 2016-12-08 13:15:00 保存截图的流程就不说了,这篇博客只说一下以任意的格式保存时间. ...
- python第十八天-----Django基础
1.路由系统 a.普通路由 url(r'^index$', views.index), b.正则路由 url(r'^index/(\d*)', views.index), url(r'^manage/ ...
- 程序中保存状态的方式之ViewState
程序中保存状态的方式有以下几种: 1.Application 2.Cookie 3.Session 4.ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hid ...