oracle 优化--索引

一、事务

1、简介

事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败。DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突。

1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存所有的更改的数据。

2)显示回滚:当事务遇到ROLLBACK指令时,也将结束事务的执行,但是此时它回滚所有更改的数据到事务开始时的原始值,即取消更改,数据没有变化。

3)DDL语句:一旦用户执行了DDL(数据定义语言,如create,drop等)语句,则之前的所有DML(数据操作语言)操作作为一个事务提交,这种提交称为隐示提交。

4)正常结束程序:如果oracle数据库应用程序正常结束,如使用sqlplus工具更改了数据,而正常退出该程序(exit),则oracle自动提交事务。

5)非正常地结束程序:当程序崩溃或意外终止时,所有数据更改都被回滚,这种回滚成为隐示回滚。

2、事务的特点

事务有4个特性,简写为ACID特性。

1)原则性:以转账操作为例,转出账户余额减少和转入余额增加是两个DML语句,但是必须作为一个不可分割的完整操作。要么同时成功,要么同时失败,只转出而没有转入显然是不可接受的。

2)一致性:无论是在事务前、事务中、事务后,数据库始终处于一致的状态。例如:转账前分别是2000和1000,总金额是3000,转账300后分别是1700和1300,总金额还是3000.这就叫做一致性。不一致就是在某个时间点查询到的总金额不是3000.

3)隔离性:在某个时间段,肯定有很多人都在转账,每个人的转账都是在自己的事务中,所以在一个数据库中,会有很多事物同时存在。虽然同时存在很多事物,但是事物之间不会相互影响。

4)持久性:如果事物提交成功,则数据修改永远生效,如果是回滚,则数据完全没有没修改,就相当于没有这件事情发生。

二、索引

1.索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需要的数据。就像书的目录,可以通过目录快速查找所需信

息,无需阅读整本书。

2.、索引的分类

1)B树索引结构

4、创建索引的语法

create [unique] index 索引名称 on 表名(列名)[tablespace 表空间名称]

解释:

[unique]用于指定唯一索引,默认情况下为非唯一索引

[tablespace]为索引指定表空间

1)创建标准索引

SQL> CREATE INDEX index_name ON tablename(columnname)

TABLESPACE index_tbs;

2)重建索引

SQL> ALTER INDEX index_name REBUILD;

合并索引碎片

SQL>ALTER INDEX index_name COALESCE;

3)删除索引

SQL> DROP INDEX index_name;

例1:

1)在雇员表(emp)中,为雇员名称(ename)列创建b树索引。

5、创建唯一索

n 确保在定义索引的列中没有重复值

n Oracle 自动在表的主键列上创建唯一索引

n 使用CREATE UNIQUE INDEX语句创建唯一索引

语法如下:

SQL> CREATE UNIQUE INDEX index_name

ON tablename(columnname);

例:在薪水级别(salgrade)表中,为级别编号grade列创建唯一索引。

6、反向键索引

与常规B树索引相反,反向键索引在保持列顺序的同时反转索引列的字节。反向键索引通过反转索引键的数据值,使得索引的修改平均分布到整个索引树上。主要应用于所多个实例同时访问一个数据库的场景中

6、位图索引

位图索引适合低于基数的列,即该列的值是有限的几个。例如:雇员表中的工种(job)列,即便是几百万条雇员记录,工种也是有限的。Job列可以作为位图索引,类似的还有图书表中的图书类别列等。

位图索引不直接存储ROWID,而是存储字节位到ROWID的映射,减少响应时间,节省空间占用。位图索引不应当在频发发生insert、update、delete操作的表上使用,这是因为单个位图索引指向表的很多数据行,当修改索引项时需要将其指向的数据行全部锁定,这会严重降低数据库的并发处理能力。位图索引适合用于数据仓库和决策支持系统中

例:在雇员emp表中,为工种(job)列创建位图索引。

基本语法:

CREATE BITMAP  INDEX emp_job_bit_idx ON emp(job);

6、组合索引
类似sqlserver的复合索引,在表内多列上创建索引。索引中的列不必与表中的列顺序一致,也不必相互邻接。

6、基于函数的索引

需要创建的索引需要使用表中一列或多列的函数或表达式,也可以将基于函数的索引创建为B树索引或位图索引。

基本语法:

SQL> CREATE INDEX emp_ename_upper_idx

ON tablename (UPPER(columnname));

:在雇员(emp)表中,为雇员名称(ename)列创建小写函数索引

6、创建索引的原则

n 频繁搜索的列可以作为索引列

n 经常排序,分组的列可以作为索引

n 经常用作连接的列(主键/外键)可以作为索引

n 将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中

n 对于大型索引而言,考虑使用NOLOGIN子句创建大型索引。

n 根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理。

时间: 2024-11-06 03:55:34

oracle 优化--索引的相关文章

oracle 优化——索引与组合索引

1.索引结构.第一张图是索引的官方图解,右侧是存储方式的图解. 图中很清晰的展示了索引存储的状况. 在leaf 节点中存储了一列,索引所对应项的 :值,rowId,长度,头信息(控制信息) 这样我们就能很清楚.如果通过索引查找数据,而只需要这个索引的值的时候,写上列名,就可以不需要回表. 2.索引在一般的数据量情况下,只有三层.leaf 是目录,branch 是目录的目录.可以做一个测试 1 drop table t1 purge; 2 drop table t2 purge; 3 drop t

Oracle 建立索引及SQL优化

Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引 复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引.数据库索引主要进行提高访问速度. 建设原则: 1.索引应该经常建在Where 子句经常用到的列上.如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%.则应该考虑. 2.对于两表连接的字段,应该建立索引.如果经常在某表的一个字段进行Order By 则也经过进行索引. 3.不应该在小表上建设索引. 优缺点:

oracle 性能优化--索引总结

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

索引优化原则及Oracle中索引总结

索引建立原则 确定针对该表的操作是大量的查询操作还是大量的增删改操作. 尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. where语句中不得不对查询列采用函数查询,如upper函数,最好建立相应函数索引: 在SQL语句中经常进行GROUP BY.ORDER BY的字段上建立索引 用于联接的列(主健/外健)上建立索引: 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定: 尝试建立复合索引来进一步提高系统性能.修

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

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

oracle 不走索引的几种情况

不走索引的其它原因:   1.建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念.   2.在包含有null值的table列上建立索引,当时使用select count(*) from table时不会使用索引.   3.在索引列上使用函数时不会使用索引,如果一定要使用索引只能建立函数索引.   4.当被索引的列进行隐式的类型转换时不会使用索引.如:select * from t where indexed_column = 5,而indexed_co

ORACLE优化器RBO与CBO介绍总结

RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO) RBO: Rule-Based Optimization 基于规则的优化器 CBO: Cost-Based Optimization 基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i. ORACLE 10g开始,

oracle优化思考-双刃剑

oracle优化是一个双刃剑,特别注意这把剑用的场合:系统规划OLTP or OLAP 优化1:索引 在DML操作时,必须维护索引,如果大量的DML操作,想想看,IO是不是老高了? 索引优点:在很多时候能提高查询速度,减低IO负载 优化2: 主键使用序列,而序列的cache大小设置 如果cache设置的小,有可能造成DML锁 如果cache设置的大,DB异常关机后,已经发出的但是未提交的cache数会被丢弃,这样就造成主键的不连续 ----未完(持续更新) oracle优化思考-双刃剑,布布扣,

【Oracle 优化】Oracle数据库提高命中率及相关优化

本文是关于Oracle数据库调试与优化方面的文章,主要介绍Oracle数据库中命中率相关的问题,包括不同的算法之间性能的比对. 关于Oracle中各个命中率的计算以及相关的调优 1)Library Cache的命中率: .计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins) SQL>SELECT SUM(pinhits)/sum(pins) FROM V$LIBRARYCACHE; 通常在98%以上,否则,需要要考虑加大共享池,绑定变量,