- 浏览: 147690 次
- 性别:
- 来自: 深圳
文章分类
最新评论
从如下链接获取:http://www.linuxidc.com/Linux/2011-08/39765.htm
一、B-Tree索引
1. 选择索引字段的原则:
•在WHERE子句中最频繁使用的字段
• 联接语句中的联接字段
•选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)
•Oracle在UNIQUE和主键字段上自动建立索引
•在选择性很差的字段上建索引只有在这个字段的值分布非常倾斜的情况下才有益(在这种情况下,某一,两个字段值比其它字段值少出现很多)
•不要在很少独特值的字段上建B-TREE索引,在这种情况下,你可以考虑在这些字段上建位图索引.在联机事务处理环境下,并发性非常高,索引经常被修改,所以不应该建位图索引
•不要在经常被修改的字段上建索引.当有UPDATE,DELETE,INSETT操作时,ORACLE除了要更新表的数据外,同时也要更新索引,而且就象更新数据一样,或产生还原和重做条目
•不要在有用到函数的字段上建索引,ORACLE在这种情况,优化器不会用到索引,除非你建立函数索引
•可以考虑在外键字段上建索引,这些索引允许当在主表上UPDATE,DELETE操作时,不需要共享子表的锁,这非常适用于在父表和子表上有很多并发的INSERT,UPDATE和DELETE操作的情况
•当建立索引后,请比较一下索引后所获得的查询性能的提高和UPDATE,DELETE,INSERT操作性能上的损失,比较得失后,再最后决定是否需建立这个索引
2. 选择建立复合索引
复合索引的优点:
•改善选择性:复合索引比单个字段的索引更具选择性
• 减少I/O:如果要查询的字段刚好全部包含在复合索引的字段里,则ORACLE只须访问索引,无须访问表
什么情况下优化器会用到复合索引呢?
(a) 当SQL语句的WHERE子句中有用到复合索引的领导字段时,ORACLE优化器会考虑用到复合索引来访问.
(b) 当某几个字段在SQL语句的WHERE子句中经常通过AND操作符联合在一起使用作为过滤谓词,并且这几个字段合在一起时选择性比各自单个字段的选择性要更好时,可
能考虑用这几个字段来建立复合索引.
(c) 当有几个查询语句都是查询同样的几个字段值时,则可以考虑在这几个字段上建立复合索引.
复合索引字段排序的原则:
•确保在WHERE子句中使用到的字段是复合索引的领导字段
• 如果某个字段在WHERE子句中最频繁使用,则在建立复合索引时,考虑把这个字段排在第一位(在CREATE INDEX语句中)
• 如果所有的字段在WHERE子句中使用频率相同,则将最具选择性的字段排在最前面,将最不具选择性的字段排在最后面
• 如果所有的字段在WHERE子句中使用频率相同,如果数据在物理上是按某一个字段排序的,则考虑将这个字段放在复合索引的第一位
二、位图索引
什么情况下位图索引能够改善查询的性能呢?
•WHERE子句包含多个谓词于中低基数的字段
• 单个的谓词在这些中低基数的字段上选取大量的行
• 已经有位图索引创建于某些或全部的这些中低基数的字段上
•被查询的表包含很多行
•可以在单一个表上建立多个位图索引,因此,位图索引能够改善包含冗长WHERE子句的复杂查询的性能,在合计查询和星形模型的联接查询语句中,位图索引也可以提供比较优良的性能
位图索引与B-TREE索引的比较
•位图索引更节省存储空间
•位图索引比较适用于数据仓库环境,但不适于联机事务处理环境.在数据仓库环境,数据维护通常上通过批量INSERT和批量UPDATE来完成的,所以索引的维护被延迟直到DML操作结束.举例:当你批量插入1000行数据时,这些插入的行被放置到排序缓存中(SORT BUFFER),然后批处理更新这1000个索引条目,所以,每一个位图段在每一个DML操作中只需更新一次,即使在那个位图段里有多行被更新
•一个键值的压缩位图是由一个或多个位图段所组成,每一个位图段大约相当于半个BLOCK SIZE那么大,锁的最小粒度是一个位图段,在联机事务处理环境,如果多个事务执行同时的更新(即并发的更新),使用位图索引就会影响UPDATE,INSERT,DELETE性能了
•一个B-TREE索引的条目只包含一个ROWID,因此,当一个索引条目被锁定,即一行被锁定.但是对于位图索引, 一个索引条目潜在地有可能包含一段ROWID(即某一个范围内的ROWID,有多个ROWID),当一个位图索引条目被锁定时,则这个条目包含的那一段ROWID都被锁定,从而影响并发性.当一个位图段内的ROWID的数量越多时,并发性就越差.虽然如此,对于BULK INSERT,UPDATE和DELETE,位图索引的性能还是比B-TREE索引要好
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-08/39765.htm
发表评论
文章已被作者锁定,不允许评论。
-
数据归档的方法
2016-02-21 18:35 483--数据归档的方法create or replace pr ... -
ORACLE跟新数据的性能提升(通过中间表)
2016-02-21 18:35 596--更新历程权力值--1.查询效率慢的update FW_ ... -
JBPM的表相关操作
2016-02-21 18:35 542--通过流程的编码获取该对应的流程定义 select * ... -
一套oracle面试题笔试题以及参考答案
2014-12-22 23:35 731http://blog.sina.com.cn/s/blog ... -
oracle循环语句的几种使用方法(转载)
2014-12-22 23:32 583主要有以下五种循环: ... -
左连接右连接
2015-03-01 22:36 528对于外连接:Oracle中可以使用“(+) ”来表示,9i ... -
复制一个表到另一个表、视图、临时表
2014-10-12 21:26 432Oracle数据结构软件测试SQL 创建一个表n ... -
将EXCEL导入到数据库
2014-07-30 20:51 480用PLSQL Developer工具。 1 ... -
关于oracle with as用法
2014-06-26 20:32 814with as语法–针对一个别名with tmp as (s ... -
tomcat配置数据库连接池
2014-05-04 21:21 6191.所有的tomcat项目共用一个连接池配置:在tomcat ... -
关于SQL优化方面的建议
2014-01-29 23:13 5452014-01-25 SQL优化主 ... -
connect by prior start with
2014-01-08 22:48 460在oracle中通过connect by prior来实 ... -
from v sql v session where sqlid = sqlid
2014-01-08 22:44 553--博客,细节可以进去看 http://blog.csdn ... -
统计支付成功金额最大的前三十个供应商1-5w等支付笔数.sql
2013-12-12 15:34 587select a.payeename,(select co ... -
sql select case when group by 行转列
2013-12-10 17:30 812XJrain表里存放每天的雨量,我想一次显示过去一天,过去 ... -
Oracle中查看已执行sql的执行计划
2013-12-10 16:43 528有时候我们可能会希望查看一条已经执行过的sql的执行计划,常 ... -
触发器
2013-11-19 18:32 550DROP TRIGGER GAM.TRIG_UPDATE_R ... -
DB2密码过期
2013-09-27 17:18 473SQL30082N 尝试建立连接失败,安全性原因为 &q ... -
统计失效视图
2013-09-18 19:59 616--统计失效视图个数和视图名称 (0 个失效) ... -
DB2数据库过期
2013-08-07 11:56 602如果连接数据库提示 sqlstate 57019 说明是 ...
相关推荐
掌握SQL的基础语法,如SELECT、INSERT、UPDATE、DELETE语句,以及联接(JOIN)、子查询、聚合函数(COUNT、SUM、AVG等)和分组(GROUP BY)等,是每个Oracle开发者的基本功。 二、创建表 创建表是数据库设计的第一...
3. **创建语法**:创建B树索引的基本语法是:`CREATE INDEX index_name ON table_name (column_name);`,函数索引则需指定函数:`CREATE INDEX func_index ON table_name (function(column_name));` 4. **常见使用...
### Oracle基础知识总结初学者必备 Oracle数据库作为一款广泛使用的数据库管理系统,在企业和开发领域扮演着重要的角色。对于初学者而言,掌握其基础知识是非常必要的。本文将根据提供的内容进行深入解析,并结合...
7. **创建索引**:创建索引可以加速对表中特定列的查询。例如,`CREATE INDEX index_name ON table_name(column_name);` 创建基于`column_name`的索引`index_name`。 8. **创建表分区**:分区是将大表分解成更小、...
例如,在MySQL中,可以使用CREATE INDEX语句来创建索引,而在Oracle中,需要使用CREATE INDEX语句来创建索引,并可以使用alter table语句来修改索引。 五、视图 MySQL和Oracle都支持视图机制,但是它们的视图创建...
这篇总结将深入探讨Oracle的一些关键知识点,包括登录模式的区别、Blob字段处理、数据库级触发器、子程序和表类型、XML集成、归档日志恢复、SQL与Oracle函数差异以及RDBMS的基本概念。 1. **登录模式的区别**: - ...
6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用视图 6.5.3 使用PL/SQL...
本文将深入探讨“Oracle资料(语句总结版)”中涉及的关键知识点,帮助初学者快速掌握Oracle的基本操作和SQL语言。 1. **SQL基础**:SQL(结构化查询语言)是用于管理关系数据库的标准语言。在Oracle中,SQL主要...
通过上述实验,学习者不仅掌握了基本的数据库操作,还体验到了问题解决的过程,这对于后续深入学习Oracle数据库和数据库管理至关重要。随着经验的积累,可以进一步探索触发器、索引、视图、事务控制等更复杂的数据库...
- **了解Oracle的基本功能**:通过实际操作,让学生对Oracle的基本功能有直观的认识。 - **掌握SQL*PLUS的使用**:学习SQL*PLUS的基本命令和技术,为后续更复杂的数据库操作打下基础。 - **深入理解PL/SQL**:通过PL...
本文将深入讲解Oracle数据库的基础命令,涵盖数据库的基本概念、关系数据库模型、数据操作语言(DDL、DML、DCL)以及数据库设计方法。 首先,理解数据库基础至关重要。数据库是一个组织和存储数据的系统,它允许...
本资料"Oracle基本操作_整理.rar"包含了作者个人的学习经验和总结,旨在帮助初学者和有一定基础的用户更好地理解和掌握Oracle数据库的操作。 1. **安装与配置**: - Oracle的安装分为客户端和服务器端,需要根据...
- **索引优化**:创建索引的原则、索引类型选择、索引维护策略。 - **备份与恢复**:备份策略设计、RMAN工具使用、灾难恢复计划制定。 #### 3. 性能调优 - **SQL性能调优**:执行计划分析、索引使用情况检查、SQL...
创建索引的基本语法如下: ```sql CREATE INDEX index_name ON table_name (column1, column2, ...); ``` 其中`index_name`是索引的名称,`table_name`是要创建索引的表名,`column1, column2, ...`是要包含在索引中...
预处理数据,如清理目标表或创建索引。 - **通过unix/Linux PIPE管道加快exp/imp速度:** 使用管道而非文件传输数据,减少I/O操作。 - **全库导入的一般步骤:** 1. 停止所有应用,确保数据一致性。 2. 执行全库...
- **整体视角与十大交付物**:从全局角度出发,总结了作为一位Oracle DBA应该掌握的核心技能集,明确了成功的数据库管理员所应具备的能力。 #### 五、数据库调优 - **数据库调优**:介绍了数据库层面的性能优化...
创建索引的基本语法如下: ```sql CREATE INDEX index_name ON table_name (column1, column2, ...); ``` **1.2.1.2 索引特点** - **加快查询速度**:通过索引可以快速定位到数据表中的特定记录,从而显著提高...
本课程通过深入学习和实践,使学生掌握了ORACLE数据库的设计原则、管理技巧和安全策略,为今后的毕业设计和实际工作打下了坚实基础。 在实际的数据库设计中,需要结合业务需求,合理规划表结构,有效利用索引,确保...