简单的说就是这个

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 大数据量分页建议方案的更多相关文章

  1. [转]Sql server 大数据量分页存储过程效率测试附代码

    本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...

  2. C# & SQL Server大数据量插入方式对比

    以下内容大部分来自: http://blog.csdn.net/tjvictor/article/details/4360030 部分内容出自互联网,实验结果为亲测. 最近自己开发一个向数据库中插入大 ...

  3. SQL优化-大数据量分页优化

    百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ...

  4. SQL Server 大数据量insert into xx select慢的解决方案

    最近项目有个需求,把一张表中的数据根据一定条件增删改到另外一张表.按理说这是个很简单的SQL.可是在实际过程中却出现了超级长时间的执行过程. 后来经过排查发现是大数据量insert into xx s ...

  5. SQL Server 大数据量批量插入

    private void AddShuJu_Click(object sender, RoutedEventArgs e) { Stopwatch wath = new Stopwatch(); wa ...

  6. MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化   ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...

  7. PGIS大数据量点位显示方案

    PGIS大数据量点位显示方案 问题描述 PGIS在地图上显示点位信息时,随点位数量的增加浏览器响应速度会逐渐变慢,当同时显示上千个点时浏览器会变得非常缓慢,以下是进行的测试: 测试环境: 服务器: C ...

  8. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  9. MySQL大数据量分页查询

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...

随机推荐

  1. SQL Server 数据库的维护(三)__事务(transaction)和锁

    --维护数据库-- --事务(transaction)和锁-- --事务(transaction)-- --概述: 事务是指封装了一组T-SQL语句的单个逻辑单元.单元中的所有语句作为一个整体,在满足 ...

  2. adb opendir failed ,permission denied

    做数据库的时候,我手机是htc的,root过的,找数据库db文件一直找不到, 我使用的adb命令ls的时候会提示:adb opendir failed ,permission denied ,解决方法 ...

  3. 利用 cookie 模拟网站登录

    import urllib import urllib2 import cookielib filename = 'cookie.txt' \#声明一个MozillaCookieJar对象实例来保存c ...

  4. CentOS 7 安装 MySQL

    转自:http://www.centoscn.com/mysql/2016/0315/6844.html 环境 CentOS 7.1 (64-bit system) MySQL 5.6.24 Cent ...

  5. centos网卡配置和防火墙停止和启动

    Linux 设置网卡配置ip vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static ...

  6. map集合键值对存储,键值不重复,值可以重复

    import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Li ...

  7. Win32 RGB三原色

    以前看到三原色的图案,一直很好奇是如何画出来.后来终于搞清楚了,其实很简单,实际上就是RGB三个分量的"位与"运算. 下面给出Win32绘制三原色图案的例子,特此记录在此: #in ...

  8. 【面向对象版】HashMap(增删改查)

    前言: 关于什么是HashMap,HashMap可以用来做些什么,这些定义类的描述,请参照[简易版]HashMap(增删改查)的内容. 这章节主要是面向实例,直接进行HashMap(增删改查)的演示. ...

  9. jqGrid的选中行事件

    http://blog.csdn.net/u014381863/article/details/50375121  

  10. Linux下查看IP的命令:ifconfig -a

    按照指南实践,在NFS挂载测试和tftp服务器架设时,均需用到本机的IP地址,怎么查看呢? 很简单,键入命令:ifconfig -a 这个命令具体是怎么定义的呢?有时间再查阅,先跑遍指南.