一次DB2分页语句的优化,带你拨开分页SQL优化的外衣

1 前言:

最近,项目中的一个 DB2分页查询很慢 ,组长将此分页的优化分派给了我;然后一顿优化(乱操作)后,将DB2分页查询耗时降到了比较满意的情况,[ 开森 ];

然后马上将结果报告了组长,组长查看我的演示后,发现分页查询确实快了很多,可以达到让人“接受的程度”,比优化之前的 页面一直转圈等待 相当可以了呀;

注:优化后的演示环境与发现分页查询慢时的环境基本一致,包括库中数据量、DB2的配置、服务器的配置等。

首先通过查看执行计划发现,SQL语句中的索引都利用上了,那么暂时就不是 索引 的问题了,最后发现是 SQL语句存在问题 ,对SQL进行了优化,查询就快了;

下面就简单描述下DB2的分页SQL是怎么进行优化的,binggou 走起;

本文主线:

  • 必备前提:select 查询SQL的逻辑执行顺序
  • 优化历程:DB2分页SQL优化过程
  • 知识扩展:分享一些导致分页查询慢的特别案例

2 必备前提:

在对查询SQL语句进行优化时,需要知道其逻辑执行顺序,这对进行SQL优化有很大帮助的;

SQL的 逻辑执行顺序 ,指的是SQL语句按照一定的规则,一整条语句应该如何执行,每一个关键字、子句部分在什么时刻执行;

1、一个简单select查询SQL的逻辑执行顺序如下:

  1. 先执行 from table join table ,获取要操作的表及关联的表,对它们计算笛卡尔积,得到一个虚拟表v1;
  2. 然后执行 on 条件 ,对虚拟表v1进行连接查询筛选,得到一个虚拟表v2;
  3. 然后执行 where 条件 ,对虚拟表v2中的数据进行筛选,得到虚拟表v3;
  4. 然后在执行 group by 语句,将虚拟表v3中的数据进行分组,得到虚拟表v4;
  5. 再执行 Having 条件过滤 ,对分组后的虚拟表v4进行条件筛选,得到虚拟表v5;
  6. 然后对虚拟表v5的数据执行 select 投影列 ,只保留select中的展示的字段,得到虚拟表v6;
  7. 然后再执行 order by 排序语句 ,对虚拟表v6中的数据进行排序,得到虚拟表v7;
  8. 最后才执行 limit 等分页语句(限制条数) ,得到虚拟表v8 。

2、简单分析下查询慢的分页SQL:

上面简单描述了下查询SQL的逻辑执行顺序,下面就来分析下查询慢的分页语句的逻辑执行顺序;

SELECT * FROM(SELECT B.*, ROWNUMBER() OVER() AS RN FROM(selectts.name,ts.age,tc.class_name,ts.describe,ts.birthdayfrom t_student tsLEFT JOIN t_class tc on tc.class_id = ts.class_idwh

一次DB2分页语句的优化,带你拨开分页SQL优化的外衣相关推荐

  1. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)

    MySQL架构优化实战系列4:SQL优化步骤与常用管理命令 原文:http://dbaplus.cn/news-11-649-1.html 一.SQL语句优化步骤 1.查看MySQL状态及配置 sho ...

  2. 谈谈mysql优化_浅谈MySQL SQL优化

    本文首发于个人微信公众号<andyqian>,期待你的关注 前言 有好几天没有写文章了,实在不好意思.之前就有朋友希望我写写MySQL优化的文章.我迟迟没有动笔,主要是因为,SQL优化这个 ...

  3. SQL优化(一)、sql优化一般步骤

    sql优化一般步骤概要: 通过 show status 命令了解各种sql的执行频率 定位执行效率较低的sql语句 通过explain分析低效sql的执行计划 通过 show profile 分析sq ...

  4. mysql数据库优化语句_【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!

    慢SQL消耗了70%~90%的数据库CPU资源: SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低: SQL语句可以有不同的写法: 1 不使用子 ...

  5. Delete带有子查询的sql优化,改为innerJoin解决

    delete语句很慢,明明有索引也不走 DELETE FROM r_verify_result where ID_RULE_INFO in (select t2.ID_RULE_INFO from   ...

  6. oracle sql优化指导,基于Oracle的sql优化(1)

    先创建表和索引 create table emp_temp as select * from emp; create index idx_mgr_temp on emp_temp(mgr); crea ...

  7. html 分页_MySQL——优化嵌套查询和分页查询

    Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写 ...

  8. mysql添加二级索引的sql语句_MySQL面试知识点追命连环问(二)事务、索引及SQL优化...

    目录 ​上次我们讨论了MySQL的运行流程及原理,字段设计,存储引擎和查询缓存. 这次我们继续来追命连环问关于事务,索引,SQL优化等相关的内容.准备好了吗?事务 索引 SQL优化 常见问题 1. M ...

  9. sql server 数据分析优化实战(一)——SQL语句优化

    前言 在我们进行数据分析的时候,首要的目标是根据业务逻辑,通过编写SQL代码得到我们想要的结果,这是毋庸置疑的.一般情况下,由于我们分析的数据量比较少,体会不出SQL语句各种写法的性能优劣,对SQL代 ...

最新文章

  1. TCL脚本语言基础介绍
  2. 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox
  3. ICCV 2019 | Lifelong GAN:基于持续学习的条件图像生成模型
  4. SQL基础【五、Where】
  5. Java IO5:管道流、对象流
  6. access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
  7. 音乐播放器 audio
  8. 安全基础知识 细说暴库的原理与方法
  9. java类、抽象类、接口的继承规则
  10. 准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC、AUC
  11. eclipse——配置maven插件
  12. Asp.net core WebApi 使用Swagger生成帮助页实例
  13. ie选项 由于该计算机受到限制 本次操作已被取消,IE“Internet 选项”无法打开提示“由于该计算机受到限制本次操作已被取消”...
  14. JS 在线预览Word,Excel
  15. NOI题库答案(1.5 编程基础之循环控制) AC
  16. 惠普暗影2 pro ubuntu16.04安装nvidia显卡驱动
  17. MFC API 设置Excel单元格格式
  18. Android动态申请Camera权限应用闪退问题
  19. java数字猜大小游戏_Java之数字猜大小
  20. RabbitMQ总结

热门文章

  1. 夜神模拟器安卓7.1(64位)安装xposed
  2. 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。
  3. 北斗链张蕾:法定数字货币机制研究(上)
  4. GMail, G~Mail
  5. 浅谈对原型及原型链的理解
  6. 硬件知识:32-64位电脑?操作系统?软件?
  7. LSD 用python的opencv来做线检测
  8. Numpy——bool运算
  9. edas部署需要哪些参数_edas配置
  10. 跟燕十八学习PHP-第十三天-常用数组函数讲解