此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多

优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出所需要的列

例子1

优化前:

  1. select t.* from (
  2. select r.* ,row_number() over(order by r.id desc) row from tab(nolock) r
  3. where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000
  4. ) as t  where row between 1 and 10
select t.* from (
select r.* ,row_number() over(order by r.id desc) row from tab(nolock) r
where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000
) as t where row between 1 and 10

优化后:

  1. select r.* from (
  2. select r.ID ,row_number() over(order by r.id desc) row from tab(nolock) r
  3. where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000
  4. ) as t join tab r on r.id=t.id where row between 1 and 10
select r.* from (
select r.ID ,row_number() over(order by r.id desc) row from tab(nolock) r
where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000
) as t join tab r on r.id=t.id where row between 1 and 10

最近又有一个例子

例子2

优化前:tablA数据量1千多万,tablB数据量几百万,查询速度11秒多

  1. select * from (
  2. select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime,row_number() over(order by d.id desc) row
  3. from tablA(nolock) d
  4. join tablB(nolock) p on p.id=d.lessonplanid
  5. where p.createID in(109486,103295,103298,109347,130346,181382,330312)
  6. ) t where t.row between 1 and 20
select * from (
select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime,row_number() over(order by d.id desc) row
from tablA(nolock) d
join tablB(nolock) p on p.id=d.lessonplanid
where p.createID in(109486,103295,103298,109347,130346,181382,330312)
) t where t.row between 1 and 20

优化后:查询速度14毫秒

  1. select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime from (
  2. select  d.id,row_number() over(order by d.id desc) row
  3. from tablA(nolock) d
  4. join tablB(nolock) p on p.id=d.lessonplanid
  5. where p.createID in(109486,103295,103298,109347,130346,181382,330312)
  6. ) t join tablA(nolock) d on d.id=t.id   join tablB(nolock) p on p.id=d.lessonplanid
  7. where t.row between 1 and 20
select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime from (
select d.id,row_number() over(order by d.id desc) row
from tablA(nolock) d
join tablB(nolock) p on p.id=d.lessonplanid
where p.createID in(109486,103295,103298,109347,130346,181382,330312)
) t join tablA(nolock) d on d.id=t.id join tablB(nolock) p on p.id=d.lessonplanid
where t.row between 1 and 20

sql大数据多条件查询索引优化的更多相关文章

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

    ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...

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

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

  3. MySql数据表设计,索引优化,SQL优化,其他数据库

    MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...

  4. mysql处理大数据量的查询速度究竟有多快和能优化到什么程度

    mysql处理大数据量的查询速度究竟有多快和能优化到什么程度 深圳-ftx(1433725026) 18:10:49  mysql有没有排名函数啊 横瓜(601069289) 18:13:06  无 ...

  5. MySQL大数据量分页查询

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

  6. J2EE综合:如何处理大数据量的查询

    在实际的任何一个系统中,查询都是必不可少的一个功能,而查询设计的好坏又影响到系统的响应时间和性能这两个要害指标,尤其是当数据量变得越来越大时,于是如何处理大数据量的查询成了每个系统架构设计时都必须面对 ...

  7. PL/SQL Developer 使用中文条件查询时无数据的解决方法

    PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:select userenv('language') from dual; 显示:SIM ...

  8. PL/SQL Developer 使用中文条件查询时无数据的解决方法(转)

    原文地址: PL/SQL Developer 使用中文条件查询时无数据的解决方法 PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:sel ...

  9. 【大数据之数据仓库】GreenPlum优化器对比测试

    在< [大数据之数据仓库]选型流水记>一文中有提及,当时没有测试GreenPlum的quicklz压缩算法和ORCA查询优化器,考虑到quicklz压缩算法因为版权问题不会开源(详情请参阅 ...

随机推荐

  1. Javascript框架设计思路图

    这个系列的随笔都是关于Javascript框架设计一书的读书笔记(作者是司徒正美),不是本人原创!!! 一.简介: 1.市面上主流的JS框架,大多数是由一个个模块组合而成,模块化是大多数让软件所遵循的 ...

  2. redis 持久化之 rdb 快照持久化

    解释1: 虽然redis是单进程,但是它有一个单独的子进程进行rdb操作,为了保证的数据的一致性,当进行rdb操作失败的时候,主进程就停止写入 所以才有了stop-write-on-bgsave-er ...

  3. bind(0)

    通配地址就是全0的地址,由内核随机选取

  4. WordNet::Similarity的安装和使用

    简介 WordNet::Similarity是一个Perl实现的软件包,可以用来计算两个概念(或者word sense)之间的语义相似度,它提供了六种计算相似度和三种计算概念之间关联度的方法,所有的这 ...

  5. c++删除容器中的奇数

    出自 c++ primer(4th)282页,26题 题意 数组ia[]={0,1,1,2,3,5,8,13,21,55,89};把ia复制到一个list容器中.使用单个迭代器参数版本的erase() ...

  6. 常用命令(Linux、Android、adb)

    1. Linux 2. Android 1. pm   (package Manager) 1). 安装APK(一般不使用,用adb我感觉更好) pm install -r /data/card/Ap ...

  7. 使用javascript获取wx.config内部字段解决微信分享

    背景 在微信分享开发的时候我们通常的流程是 <?php require_once "jssdk.php"; $jssdk = new JSSDK("yourAppI ...

  8. android 加载图片框架--Glide使用详解

    一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...

  9. slot的使用

    1.slot https://www.w3cplus.com/vue/vue-slot.html 2.ref https://www.cnblogs.com/xumqfaith/p/7743387.h ...

  10. 访问Django项目出现DisallowedHost at / Invalid HTTP_HOST header问题

    闲来无事,想玩玩django,源码安装碰到了一堆乱七八糟依赖性问题,耗费一下午的时间总算是在ubuntu14.04上搭建好了python3+django2开发环境, 心血来潮,创建了一个django项 ...