简单的说就是这个

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. 使用JSONObject遇到的问题,java.lang.NoClassDefFoundError: net/sf/json/JSONObject

    先是报 java.lang.NoClassDefFoundError: net/sf/json/JSONObject 这个错误, 打开项目属性找到java build path中的libaries,找 ...

  2. windbg学习.formats--转换成各种进制

    .formats 命令在当前线程和进程上下文下对一个表达式或符号进行求值,并以多种数字格式显示出来. 0:002> .formats 000ad3a0 Evaluate expression: ...

  3. machine leanring 笔记 vectorization

    the summation of the product of two terms can be expressed as the product of two vectors ps.  surf   ...

  4. select下拉框选中问题

    每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selector"></select&g ...

  5. const的位置与区别

    转自  http://www.cnblogs.com/wucx/p/4566176.html 一个比较经典的问题——问以下两种声明的区别:1)  const char * p2)  char * co ...

  6. printAB()

    #include <iostream> void printA() { std::cout << "A" << std::endl; } voi ...

  7. 使用Linux碎解二

    承接上文碎解一.本章讲述,基本配置. 一.网络配置相关. error:(执行yum 命令时出现)Cannot find a valid baseurl for repo:base/7/x86_64 解 ...

  8. 设置centos7语言显示环境

    1.查看可选语言显示包 locale -a ............(省略好多) zh_CNzh_CN.gb18030zh_CN.gb2312zh_CN.gbkzh_CN.utf8zh_HKzh_HK ...

  9. StartFP

    1.INODS执行完成时间为13:06:04分, 从日志信息无法知道STARTFP执行到哪一步 从INODS执行完成时间可知道startFp执行时间为13:06:05分开始, 执行StartFP中的e ...

  10. String类字符串截取示范

    package it.com; // 要求:對字符串“jflksjdfnbalkdfjnbaddddnbahhuhnbauuuuahnbahdfunbadhfudf”进行检索:判断有多少个nba; / ...