(转)数据库性能分析、优化入门

简介: 原文:http://www.javaeye.com/topic/811222    最近参加了公司一位DBA关于数据库性能的分析,觉得讲得挺不错的,因此做下总结,也算是一种积累。   这个博文整体结构分为三个部分: 第一部分,阐述数据库的数据存储结构; 第二部分,SQL性能分析(核心部分); 第三部分,SQL调优实例。

原文:http://www.javaeye.com/topic/811222

 

 最近参加了公司一位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:

Sql代码 
  1. SELECT *  
  2.   FROM (select rid  
  3.           FROM (select r.rid, rownum rnum  
  4.                   FROM (select rowid rid  
  5.                           FROM CREDIT_REMARK t  
  6.                          WHERE t.POSTER_MEMBER_ID = :1 and t.POSTER_ROLE = #memberRole#  
  7.                          ORDER BY t.GMT_REMARK_MODIFIED DESC, t.ID DESC) r  
  8.                  WHERE rownum <= #endRow :INTEGER#)  
  9.          WHERE rnum > #startRow :INTEGER#) t1,  
  10.        CREDIT_REMARK t2  
  11.  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), 从普通表中完成分页转为索引内完成分页,减少回表需要读取的页面。
目录
相关文章
|
15天前
|
SQL 关系型数据库 MySQL
Vanna使用ollama分析本地数据库
这篇文章详细介绍了如何使用Vanna和Ollama框架来分析本地数据库,实现自然语言查询转换为SQL语句并与数据库交互的过程。
52 7
Vanna使用ollama分析本地数据库
|
2天前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
23 8
|
11天前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
14天前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
64 2
|
14天前
|
SQL 存储 数据库
初识SQL数据库教程——从入门到精通
随着信息技术的飞速发展,数据库技术已成为计算机领域的重要组成部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各类企业和组织的数据管理中。本文将带领读者从入门到精通,学习SQL数据库的相关知识。一、SQL数据库概述SQL(StructuredQueryLanguage)是一种用于管理关系数
31 2
|
15天前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
15天前
|
SQL 自然语言处理 关系型数据库
Vanna使用ollama分析本地MySQL数据库
这篇文章详细介绍了如何使用Vanna结合Ollama框架来分析本地MySQL数据库,实现自然语言查询功能,包括环境搭建和配置流程。
76 0
|
9天前
|
关系型数据库 MySQL 数据库
深入浅出MySQL索引优化:提升数据库性能的关键
在这个数据驱动的时代,数据库性能的优劣直接关系到应用的响应速度和用户体验。MySQL作为广泛使用的数据库之一,其索引优化是提升查询性能的关键。本文将带你一探MySQL索引的内部机制,分析索引的类型及其适用场景,并通过实际案例演示如何诊断和优化索引,以实现数据库性能的飞跃。
|
11天前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
14天前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节