PLSQL_性能优化索引Index介绍(概念)

2014-06-01 BaoXinjian In
Capgemini

一、摘要

在PLSQL查询优化中,使用和接触最多的应该是索引Index这个概念,个人也觉得对Index选择和优化是程式优化过程中比较重要的概念,特别是刚开始接触PLSQL性能优化

索引的一些概念

  • 一个索引可以由一个或多个列组成,

  • 对列设置索引其实就是对列的内容按一定的方式进行排序,检索数据的时候,检索排过序的数据,检索到最后一个有效数据之后就跳出检索

  • 这样就不必进行全表扫描了,同时可以应用很多算法提高检索效率

  • 数据库多用二分法检索数据

索引的连接方式

  • Hash Join

  • Nested Loops

  • Merge Join

索引的分类

  • B-树索引

  • 反向索引

  • 降序索引

  • 位图索引

  • 函数索引

  • 建立索引后需要分析索引才能是索引生效

  • 主键和唯一性索引的区别

索引的中Hints使用

  • 强制索引

有些情况下虽然在查询栏位中定义了index,但是PLSQL并没有走该栏位的索引,因为Oracle在解析计划时一种基于Role,一种是基于Cost有些情况下走Index的效率比全表扫秒更低,并不是建了Index,PLSQL性能会成倍提高,更糟的情况下,建Index还会导致性能比原来无索引更糟,这里有个理解误区,所以稍微提一下
;)

而且,有时候你建立的索引可能应为空间或其他原因被失效后,所以会导致某些程式原本没有任何问题,突然出现性能问题,而且是非常大性能问题,所以对EBS
DBA也有较高的要求,能监控一些系统异常

一、索引的连接方式

1. Hash Join

2. Nested Loops

3. Merge Join

具体解析

1. Hash Join

(1).概述

i.
读取一个表的资料,并将放置到内存中,并建立唯一关键字的位图索引

ii.
读取另一个表,和内存中表通过Hash算法进行比较

(2).适用对象

i. 大表连接小表

ii. 两个大表

2. Nested Loops

(1).概述

i. 循环外表记录

ii.
进行逐个比对和内标的连接是否符合条件

(2).适用对象

小表驱动大表,返回较少的结果集

3. Merge Join

(1).概述

i. 两个表进行table
access full

ii. 对table
access full的结果进行排序

iii. 进行merge
join对排序结构进行合并

(2).适用对象

通过rowid访问数据

二、索引的分类

1. B-树索引

2. 反向索引

3. 降序索引

4. 位图索引

5. 函数索引

6. 建立索引后需要分析索引才能是索引生效

7. 主键和唯一性索引的区别

具体解析

1. B-树索引

(1).概述

最常用的索引结构,默认建立的索引就是这种结构

适用于高基数数据列(该列的值大多不一样)

(2).建立方式

CREATE INDEX index_name ON wip_entities (wip_entity);

2. 反向索引

(1).概述

(2).建立方式

3. 降序索引

(1).概述

适用于需要降序排列的列

(2).建立方式

CREATE
INDEX index_name ON wip_entities (wip_entity DESC);

4. 位图索引

(1).概述

适用于低基数数据列(该列的值大多是一样)

(2).建立方式

CREATE
BITMAP INDEX index_name ON wip_entities (sex);

5. 函数索引

(1).概述

适用于该列需要适用函数的列

(2).建立方式

CREATE INDEX
index_name ON wip_entities (TRUNC(creation_date));

6. 分析索引

ANALYZE INDEX index_name COMPUTE
STATISTICS;

7. 主键和唯一性索引的区别

(1). 主键是约束,唯一性索引只是一个索引

(2). 主键不可以为空,唯一性可以为空

三. 索引的中Hints使用

1. 建立一个测试表,和测试索引


 1 CREATE TABLE dba_name (
2
3 username VARCHAR(100),
4
5 password VARCHAR(100)
6
7 ) ;
8
9 CREATE INDEX index_t ON dba_name(username) ;

2. 方法比较

(1). 未使用强制索引

SELECT *

FROM dba_name

WHERE username = ‘BAOXINJIAN‘

(2). 使用过强制索引

SELECT /*+ index(t index_t)
*/

*

FROM dba_name t

WHERE username = ‘BAOXINJIAN‘

(3).
有些情况下虽然在查询栏位中定义了index,但是PLSQL并没有走该栏位的索引,因为Oracle在解析计划时一种基于Role,一种是基于Cost

有些情况下走Index的效率比全表扫秒更低,并不是建了Index,PLSQL性能会成倍提高,更糟的情况下,建Index还会导致性能比原来无索引更糟,这里有个理解误区,所以稍微提一下
;)

Thanks and Regards

时间: 2024-10-18 19:07:57

PLSQL_性能优化索引Index介绍(概念)的相关文章

PLSQL_性能优化系列01_Oracle Index索引

2014-06-01 BaoXinjian 一.摘要 在PLSQL查询优化中,使用和接触最多的应该是索引Index这个概念,个人也觉得对Index选择和优化是程式优化过程中比较重要的概念,特别是刚开始接触PLSQL性能优化 索引的一些概念 一个索引可以由一个或多个列组成, 对列设置索引其实就是对列的内容按一定的方式进行排序,检索数据的时候,检索排过序的数据,检索到最后一个有效数据之后就跳出检索 这样就不必进行全表扫描了,同时可以应用很多算法提高检索效率 数据库多用二分法检索数据 索引的连接方式

视图性能优化——索引视图

视图性能优化——索引视图http://blog.csdn.net/eriato/article/details/41039985 索引视图 索引视图有助于提高 T-SQL 的性能 Itzik Ben-Gan T-SQL 是一种允许您以逻辑方式设计请求的语言.这里所说的“逻辑”的意思是,当编写查询时,您指定的是希望获得什么 结果,而不是希望以何种方式 获得结果.对如何处理查询进行设计是查询优化器的工作.您所遇到的需要 T-SQL 解决方案的每个问题通常都有许多不同的解决方案,它们最终会返回同样的结

Mysql5.7—mysql性能优化-索引、语句、配置(运维必备)

小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------谢谢您的参考,如有疑问,欢迎交流 一. 数据库的类型 1) 第一代数据库: 基于层次模型与网状模型的数据库 层次型数据库比较经典的是IBM公司的IMS(InformationManagement System)数据库,层次型数据库提供了良好的完整性支持,模型简单,对具有一对多层关系的部们描述非常自然.直观,容易理解,比较适用于那些实体间联系是固定的且预先定义好的环境,其性能优于关

PLSQL_性能优化系列16_Oracle DataScan数据扫描

对数据的读取操作是非常消耗资源的,如何减少对数据的扫描,是提升sql效率的一个重要方面,例如物化视图技术.本篇介绍几种sql写法,分别是CASE expression/DML with returning clause /multitable insert.[@[email protected]] 一. 用CASE EXPRESSION将多句查询组合在一起SELECT COUNT (*)FROM employeesWHERE salary < 2000;SELECT COUNT (*)FROM

PLSQL_性能优化效能跟踪工具SQL Trace分析(案例)

2014-06-25 BaoXinjian 一.摘要 SQL TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL TRACE是非常常用的方法.一般,一次跟踪可以分为以下几步:1.界定需要跟踪的目标范围,并使用适当的命令启用所需跟踪.2.经过一段时间后,停止跟踪.此时应该产生了一个跟踪结果文件.3.找到跟踪文件,并对其进行格式化,然后阅读或分析. 另文已介绍了其他的跟踪工具DBMS_PROFILER, Form Trace, Re

PLSQL_性能优化效能跟踪工具DBMS_PROFILER分析(案例)

一.摘要 Oracle PLSQL性能诊断是经常会遇到问题,所以Oracle提供了比较多的程式诊断工具,其中包括了dbms_profiler包 DBMS_PROFILER中会用到一些基本构建如下 在调用程式前DBMS_PROFILER.START_PROFILER,启动对该程式监控 在调用程式后DBMS_PROFILER.STOP_PROFILER,结束对程式监控 在监控过程中,系统会将资料存放至三个表中PLSQL_PROFILER_RUNS -> UNITS -> DATA 通过profil

MySQL 性能优化---索引及优化

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 Myisam存储引擎内置一个计数器,count(*)时直接从计数器读取:而通过innodb存储引擎查找某个数据时,是必须扫描全表的,所以当执行对表的统计(即使用count(*)函数)时,myisam要比innodb要快的很多.所以一般在innodb上执行count(*)时一般要

oracle 性能优化--索引总结

索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成.上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid. 使用索引的目的: 加快查询速度 降低I/O操作 消除磁盘排序 何时使用索引: 查询返回的记录数 排序表<40% 非排序表 <7% 表的碎片较多(频繁添加.删除) 索引的种类 非唯一索引(最经常使用) 唯一索引

mysql性能优化-索引与优化

http://hongge.blog.51cto.com/ 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 不合理需求造成资源投入产出比过低,这里我们就用一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计,附加要求:实时更新 从功能上来看非常容易实现,执行一条SELECT COUNT(*) from 表名 的Query 就可以得到结果.但是,如果我们采用不是MyISAM 存储引擎,而是使用的Innodb 的存储引擎,那么大家可以试想一下,如果存放帖子的表中已经有上千万