最近参加了公司一位DBA关于数据库性能的分析,觉得讲得挺不错的,因此做下总结,也算是一种积累。
这个博文整体结构分为三个部分:
第一部分,阐述数据库的数据存储结构;
第二部分,SQL性能分析(核心部分);
第三部分,SQL调优实例。
1 数据库的数据存储结构
在开始性能优化前,首先需要对优化的对象进行了解,这样我们才能抓住问题的本质。
页面(BLOCK)
数据库中最小的分配,读取单元,一般来说,设置为8K大小。
表
数据库中的表,是由一些列的页面(block)组成
页面物理上可以不连续,但是逻辑上是连续的
索引
索引也是由页面(block)组成
通常采用B+树的组织形式
2 SQL性能分析(核心部分)
重中之重:一条sql是否ok?如何优化?走索引是否可以提高性能?全在于下面一句话:
此SQL需要访问多少页面(BLOCK)!!!
为什么是这样的呢?原因是读页面是大量的IO操作,需要在内存中定位,或是外存中定位并加载,开销很大。而其他的SQL比较操作,>,=,like…,都是CPU计算,相对开销较小。
下面分别对几类常见SQL访问需要读取的页面(BLOCK)进行分析:
表全扫描
表中所有的页面(BLOCK)
索引全扫描
索引中所有的页面。优势:索引项相对于表项较小,页面更少
索引范围扫描
索引层数+范围中的BLOCK
索引唯一扫描
索引层数。优势:最小的页面访问量
索引扫描+回表扫描
索引BLOCK+表BLOCK
丛上面的分析可知,索引唯一扫描是最快的,也就是我们平常从某张表中根据唯一的ID查询一个唯一记录的SQL;表全扫描是最慢的,也就是需要遍历表中所有的记录。
3 SQL调优实例
这里先说一下,不是每个SQL需要优化的,如果SQL性能满足需求,是不需要做优化的。
出了性能问题的的SQL:
SELECT *
FROM (select rid
FROM (select r.rid, rownum rnum
FROM (select rowid rid
FROM CREDIT_REMARK t
WHERE t.POSTER_MEMBER_ID = :1 and t.POSTER_ROLE = #memberRole#
ORDER BY t.GMT_REMARK_MODIFIED DESC, t.ID DESC) r
WHERE rownum <= #endRow :INTEGER#)
WHERE rnum > #startRow :INTEGER#) t1,
CREDIT_REMARK t2
WHERE t1.rid = t2.rowid ORDER BY t2.GMT_REMARK_MODIFIED DESC, t2.ID DESC;
解决方案:
建索引: (POSTER_MEMBER_ID, POSTER_ROLE,STATUS, GMT_REMARK_MODIFIED DESC, ID DESC),从普通表中完成分页转为索引内完成分页,减少回表需要读取的页面。
分享到:
相关推荐
重点讲解了慢查询、索引、Multi Range Read、Index Merge、ICP,等相关功能。这里均为本人的学习总结。内容有2附图1个来自书本、一个来自网络,其余均为本人原创。 未经运行不得商业使用。
学习oracle初级入门ppt,让你对数据库性能提升 有兴趣,体验飞一般的速度。
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
本文是针对 DB2® Universal Database(DB2 UDB)的初学者在遇到 DB2 的性能问题的...的介绍,使得初学者能够在很短的时间内掌握 DB2 性能优化的基本技巧,并且能够在数据库早期设计时考虑到一些性能因素而防范于未然。
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
oracle一些基本的SQL优化,适合入门讲座 ORACLE的优化器共有3种: a. RULE (基于规则rbo) b. COST (基于成本cbo) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中 OPTIMIZER_MODE参数的各种声明,...
Oracle从入门到精通视频教程_数据库实战精讲本套Java视频中讲解了Oracle数据库基础、搭建Oracle数据库环境、SQL*Plus命令行工具的使用、标准SQL、Oracle数据核心-表空间、Oracle数据库常用对象,数据库性能优化,...
本教程会包含多个阶段来学习,从零基础到高级进阶,再到DBA的全套教程,主要内容包括Sql语言基础、数据库设计原则、高级查询技巧、存储过程编写、性能优化调整等。同时,可以以实例进行讲解,帮助读者更好地理解Sql...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
完整版 MySQL8.0从入门到精通 MySQL数据库教程 第16章 性能优化(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第17章 MySQL Replication(共27页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...
第14章 数据备份与还原(共21页).pptMySQL从入门到精通 第15章 MySQL日志(共22页).pptMySQL从入门到精通 第16章 性能优化(共18页).pptMySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).pptMySQL...