- 浏览: 1020305 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
本文只讨论Oracle中最常见的索引,即是B-tree索引。本文中涉及的数据库版本是Oracle8i。
一. 查看系统表中的用户索引
在Oracle中,SYSTEM表是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。
一般来说,应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。因为这样会带来数据库维护和管理的很多问题。一旦SYSTEM表损坏了,只能重新生成数据库。我们可以用下面的语句来检查在SYSTEM表内有没有其他用户的索引存在。
select count(*)
from dba_indexes
where tablespace_name = 'SYSTEM'
and owner not in ('SYS','SYSTEM')
/
二. 索引的存储情况检查
Oracle为数据库中的所有数据分配逻辑结构空间。数据库空间的单位是数据块(block)、范围(extent)和段(segment)。
Oracle 数据块(block)是Oracle使用和分配的最小存储单位。它是由数据库建立时设置的DB_BLOCK_SIZE决定的。一旦数据库生成了,数据块的大小不能改变。要想改变只能重新建立数据库。(在Oracle9i中有一些不同,不过这不在本文讨论的范围内。)
Extent是由一组连续的block组成的。一个或多个extent组成一个segment。当一个segment中的所有空间被用完时,Oracle为它分配一个新的extent。
Segment是由一个或多个extent组成的。它包含某表空间中特定逻辑存储结构的所有数据。一个段中的extent可以是不连续的,甚至可以在不同的数据文件中。
一个object只能对应于一个逻辑存储的segment,我们通过查看该segment中的extent,可以看出相应object的存储情况。
(1)查看索引段中extent的数量:
select segment_name, count(*)
from dba_extents
where segment_type='INDEX'
and wner=UPPER('&owner')
group by segment_name
/
(2)查看表空间内的索引的扩展情况:
select
substr(segment_name,1,20) "SEGMENT NAME",
bytes,
count(bytes)
from dba_extents
where segment_name in
( select index_name
from dba_indexes
where tablespace_name=UPPER('&表空间'))
group by segment_name,bytes
order by segment_name
/
三. 索引的选择性
索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000=0.99。
一个索引的选择性越接近于1,这个索引的效率就越高。
如果是使用基于cost的最优化,优化器不应该使用选择性不好的索引。如果是使用基于rule的最优化,优化器在确定执行路径时不会考虑索引的选择性(除非是唯一性索引),并且不得不手工优化查询以避免使用非选择性的索引。
确定索引的选择性,可以有两种方法:手工测量和自动测量。
(1)手工测量索引的选择性
如果要根据一个表的两列创建两列并置索引,可以用以下方法测量索引的选择性:
列的选择性=不同值的数目/行的总数 /* 越接近1越好 */
select count(distinct 第一列||'%'||第二列)/count(*)
from 表名
/
如果我们知道其中一列索引的选择性(例如其中一列是主键),那么我们就可以知道另一列索引的选择性。
手工方法的优点是在创建索引前就能评估索引的选择性。
(2)自动测量索引的选择性
如果分析一个表,也会自动分析所有表的索引。
第一,为了确定一个表的确定性,就要分析表。
analyze table 表名
compute statistics
/
第二,确定索引里不同关键字的数目:
select distinct_keys
from user_indexes
where table_name='表名'
and index_name='索引名'
/
第三,确定表中行的总数:
select num_rows
from user_tables
where table_name='表名'
/
第四,索引的选择性=索引里不同关键字的数目/表中行的总数:
select i.distinct_keys/t.num_rows
from
user_indexes i,
user_tables t
where i.table_name='表名'
and i.index_name='索引名'
and i.table_name=t.table_name
/
第五,可以查询USER_TAB_COLUMNS以了解每个列的选择性。
表中所有行在该列的不同值的数目:
select
column_name,
num_distinct
from user_tab_columns
where table_name='表名'
/
列的选择性=NUM_DISTINCT/表中所有行的总数,查询USER_TAB_COLUMNS有助测量每个列的选择性,但它并不能精确地测量列的并置组合的选择性。要想测量一组列的选择性,需要采用手工方法或者根据这组列创建一个索引并重新分析表。
发表评论
-
Oracle enterprise linux 6.0 安装oracle 11g 所需要的包安装
2012-07-22 08:02 7690Linux 版本是Oracle enterprise ... -
Oracle10gR2 中 Oracle Wallet 的初步使用和维护
2011-06-02 01:59 19911) Wallet作用 从Oracle10gR2开始, 通过 ... -
如何手工删除oracle数据库和软件
2011-06-02 00:29 1459一、手工删库和数据库文件有时候,有可能在dbca图形界面中找不 ... -
AIX下设置Oracle10g随机启动,随机关闭的步骤
2011-06-02 00:19 1450假如ORACLE_HOME为/opt/app/oracle/p ... -
数据库突然无法登陆,只有sysdba可以
2011-05-20 18:05 1647数据库突然无法登陆,只有sysdba可以登陆。 检查aler ... -
Linux安装Oracle报Checking operating system version must be redhat-3, SuSE-9, redhat
2011-03-24 01:26 1921在Linux系统中安装oralce的过程中,如果Linux发行 ... -
How To Update NLS_SORT Parameter Value When Using 10g Thin JDBC Driver ? [ID 469
2010-12-17 10:05 2963Applies to: JDBC - Version: 1 ... -
使用SQL_TRACE进行数据库诊断(转自eygle)
2010-12-16 17:30 862SQL_TRACE是Oracle提供的用 ... -
oracle 查询时忽略大小写的方案研究
2010-12-15 02:00 2484项目已经开发完毕,由于业务变动,某些查询需要忽略大小写,研究是 ... -
Read By Other Session
2010-12-02 22:52 753Read By Other Session Definiti ... -
必须引起DBA重视的Oracle数据库碎片
2010-12-01 17:35 1011目前,Oracle已经广泛的应用于各个行业。作为一名DBA,及 ... -
Wait Event: cache buffers chains
2010-11-30 15:58 1163cache buffers chains是相对比较常见的冲突事 ... -
log file sync(日志文件同步) 与 Log file parallel write 等待事件
2010-11-28 20:47 2144log file sync(日志文件同步)等待事件具有一个参数 ... -
删除Linux非rac环境下的ASM实例
2010-04-25 01:48 2019环境说明: 操作系统:CentOS 5 x86数据库:O ... -
扩大oracle最大session数以及清除inactive会话
2010-04-12 16:00 7330从上周起,服务器Oracle数据库出现问题,用不到半天,就会报 ... -
设计数据库时需要考虑的问题
2010-03-04 17:34 1537成功的管理系统=50% 的业务+(25%的数据库+25%的程序 ... -
介绍Oracle数据库锁的种类及研究
2009-12-02 09:30 1111本文通过对Oracle数据库锁机制的研究,首先介绍了Oracl ... -
expdp中使用连接字符串和network_link的区别
2009-12-01 11:47 1572expdp属于服务端工具,而exp属于客户端工具,expdp生 ... -
ora10G 使用数据泵(EXPDP和IMPDP)时应该注意的事项
2009-12-01 11:45 1247Oracle Database 10g引入了最新的数据泵(Da ... -
使用Oracle 10g数据泵(EXPDP/IMPDP)
2009-12-01 11:22 2029一、关于数据泵的概述 在Oracle 10 ...
相关推荐
Oracle数据库中的索引维护是数据库管理员日常工作中至关重要的一部分,尤其是在大型企业级应用中,高效的索引管理能够显著提升查询性能和数据库的整体效率。本文主要关注Oracle8i版本中的B-tree索引维护。 首先,...
本文将从Oracle数据库索引的基础概念出发,深入探讨索引维护的重要性和具体方法。 #### 一、Oracle数据库索引概述 索引是数据库中一种用于快速查找数据的数据结构。在Oracle数据库中,最常用的索引类型是B树索引...
在Oracle数据库中,索引是一种关键的...总之,维护Oracle数据库中的索引涉及监控索引的存在位置、存储状况以及选择性,这些因素都直接影响数据库的性能和查询效率。定期检查和优化索引是确保数据库高效运行的关键步骤。
在Oracle数据库中,索引的优化是一个复杂的过程,需要考虑多个因素,如数据量、查询模式、索引类型等。索引的优化不仅可以提高数据库的性能,还可以降低数据库的维护成本。 索引优化是Oracle数据库性能优化的关键。...
以下是 Oracle 数据库日常维护手册中的一些重要知识点: 检查数据库基本状况 在日常维护中,需要定期检查 Oracle 实例的状态,包括检查 Oracle 服务进程、监听状态、系统和 Oracle 日志文件等。通过检查这些信息,...
1. **Oracle数据库基础**:Oracle数据库基于SQL语言,提供数据存储、检索和管理服务。其核心组件包括数据文件、控制文件、重做日志文件、参数文件等,这些组件共同确保数据的完整性和一致性。 2. **安装与配置**:...
"iTelluro.Tools.SqlIndex"这个工具很可能是一个帮助管理和优化数据库索引的实用程序,可能提供了图形化界面或API,使得在Oracle和SQL Server之间进行索引的批量创建和删除变得更加便捷。使用这样的工具,可以大大...
Oracle数据库管理与维护技术是IT领域中的核心技能之一,尤其对于数据库管理员(DBA)而言,精通Oracle系统是必备的专业素养。"Oracle数据库管理与维护技术手册 下"是一本深入探讨Oracle数据库操作、管理和优化的专业...
总的来说,Oracle数据库中索引的使用是一门深奥的艺术,需要平衡查询效率、存储成本和维护工作。通过对索引的深入理解和合理配置,可以显著提升数据库的性能和响应速度,为企业信息系统提供更高效的服务。
本手册将深入探讨Oracle数据库的管理与维护技术,帮助读者掌握在实际环境中操作和优化Oracle系统的必备技能。 一、Oracle数据库架构 Oracle数据库采用多层架构,包括服务器进程、后台进程、数据文件、控制文件、...
在Oracle数据库的日常维护中,确保数据库的基本状况良好是首要任务。这包括检查Oracle实例状态、Oracle服务进程和Oracle监听状态。 ##### 1.1 检查Oracle实例状态 通过执行SQL命令`select instance_name, host_...
Oracle数据库中的索引管理技术 索引是 Oracle 数据库中的一个重要对象,它可以大大提高数据库中的数据检索速度。索引是包含表中选定字段的信息的对象,这些信息以某种规律排序,有一个指针指向存放实际数据的记录。...
在Oracle数据库维护培训中,有几个关键概念和技术是重点学习的内容,主要包括基础表空间、数据文件、Undo和Temp表空间。 1. **表空间(Tablespaces)**: 表空间是Oracle数据库中数据组织的主要逻辑单元,它充当了...
Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。Oracle数据库以其高效、稳定和强大的功能在金融、电信、医疗、政府等多个领域得到广泛应用。本篇...
Oracle数据库在医院信息系统中的应用非常广泛,为确保数据库的稳定运行和安全性,日常维护和优化是非常重要的。本文将从医院Oracle数据库的日常维护和优化方法入手,对Oracle数据库的日常维护和优化方法进行分析,...
详细介绍Oracle数据库系统的运作原理与组成架构;针对常用的“基本对象”及延伸应用的“高可用性对象”提供详尽说明;详解Oracle数据库的安装、建置,以及安全认证方式;深入剖析Oracle的网络联机架构与设定,包含...
索引是Oracle数据库中优化查询性能的关键工具之一。然而,随着数据的不断变化,索引的效率可能会逐渐下降。定期对索引进行分析和重建是维持高性能数据库系统的必要手段。通过合理地使用Oracle提供的索引管理工具和...
《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的...理解这些核心概念并灵活应用,将有助于构建高效、稳定且易于维护的Oracle数据库系统。
详细介绍Oracle数据库系统的运作原理与组成架构;针对常用的“基本对象”及延伸应用的“高可用性对象”提供详尽说明;详解Oracle数据库的安装、建置,以及安全认证方式;深入剖析Oracle的网络联机架构与设定,包含...