(图片 引自《ORACLE DATABASE 11G 性能优化攻略》) 创建 Oracle 的索引时需要考虑很多的因素,Oracle 提供了多种索引属性和选项,这些对象都需要 DBA 或者开发手工创建,...Oracle 数据库索引类型及用途大概如下: Oracle 数据库表和 B 树索引物理布局大概如下: (图片 引自《ORACLE DATABASE 11G 性能优化攻略》) Oracle 索引创建和维护说明如下...: 二、Oracle 索引监控 合理的为数据库表上创建战略性索引,可以极大程度的提高了查询性能。...但事实上日常中我们所创建的索引并非战略性索引,恰恰是大量冗余或是根本没有用到的索引耗用了大量的存储空间,导致 DML 性能低下。Oracle 提供了索引监控特性来初略判断未使用到的索引。...本小节描述如何使用 Oracle 索引的监控。
Oracle 监控索引特性为我们提供了一个大致判断索引是否被使用的情形。之所以这么说,是因为在Oracle 10g 中收集统计信息时会导致索引被监控,此并非sql语句而产生。...其次对于存在子表存在外键的情形,对于主表进行操作时是否会导致索引被监控呢?下面描述的是这个话题。...MON USE ------------------------------ --- --- I_CTB_FK_DEPTNO YES NO 3、不存在外键索引时监控索引情形...,如果子表上存在外键约束且存在外键索引,对于主表得DML操作不会使得子表索引被使用 b、尽管子表索引不会由于主表DML操作被监控到,但如果子表外键索引不存在,主表上的DML会产生更多的一致读(相对外键索引存在...) c、由上可知,对于外键索引未被监控到的情形,不可盲目的认为该索引无效而删除 d、对于子表不存在索引的情形,对于主表上的主键的更新以及删除主表中的一行都将导致整个子表被锁住
Oracle 提供了索引监控特性来初略判断未使用到的索引。本文描述如何使用Oracle 索引的监控。...DML完成的时间 c、耗用大量统计信息(索引)收集的时间 d、结构性验证时间 f、增加了恢复所需的时间 2、单个索引监控 a、对于单个索引的监控...3、schema级别索引监控(不含SYS用户) a、直接执行脚本来开启索引监控 robin@SZDB:~/dba_scripts/custom/sql> more idx_monitor_on.sql... a、选择数据库高峰期实施索引监控,以及尽可能使用较长的监控周期来判断索引是否被使用 b、可以对特定时间段实施多次监控以判断索引的使用频率(初略值) c、索引监控在一定程度上耗用系统资源...,一旦监控完毕后应即时关闭以避免其带来的额外开销 d、索引监控仅仅从索引的使用与否来描述索引使用,并未提供详细的索引使用频率,b点提到的方法也只是初略值
Oracle提供了索引监控特性来判断索引是否被使用。在Oracle 10g中,收集统计信息会使得索引被监控,在Oracle 11g中该现象不复存在。尽管如此,该方式仅提供的是索引是否被使用。...索引被使用的频率未能得以体现。下面的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进。...----------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production --获得当前数据库索引的使用频率...d、对于上述列出的被使用的次数为0的那些索引,应考虑索引的设置是否合理。 e、过大的索引应考虑能否使用索引压缩。 ...f、最后列出的是报告的schema名称以及索引大小的过滤条件、索引被收集的日期。注,索引列的大小sum求和有些不准确。
监控当前业务用户索引 一段时间后查询从未被使用的索引,删除无用索引 停止监控索引 1....监控当前用户所有索引 得到监控所有索引的语句: select 'alter index ' || index_name || ' monitoring usage;' from user_indexes...一段时间后查询从未被使用的索引,删除无用索引 注意:视具体业务情况,选择一周后,一月后,两月后(总之要保证应用的所有SQL都至少跑一遍) 2.1 查看这段时间内,从未被使用的索引: select * from...,主键不会被删除(会给出错误ORA-02429),但唯一性索引会被删掉。...停止监控用户所有索引 得到停止监控所有索引的语句: select 'alter index ' || index_name || ' nomonitoring usage;' from user_indexes
rownum as id, TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') as addDate from xmltable('1 to 10000000'); 一、索引...索引是一种数据库访问的方式,它可以提高从数据库中检索数据的性能,索引使数据库无需对整个表进行扫描,就能检索出所需的数据,就像书的目录一样,可以快速的查找我们所需要的内容,而不用对整本书进行阅读。...1、索引的分类 逻辑分类:单列索引、组合索引、唯一索引、非唯一索引、函数索引。 物理分类:区分索引、非区分索引、B树索引、正向索引、反向索引、位图索引。...下面通过代码和文字说明来一一介绍上面的索引 1.1、单列索引
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT ) TABLESPACE "DATACORE" ; 索引确实能提高效率
若要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只需要在索引中查询条件的索引字段值,就可以通过保存在索引中的rowid(系统为每个记录分配的物理地址)快速找到表中对应的记录...5.11 创建索引 建立索引的语法:create index语句 注:在创建索引时,要求用户具有create any index系统权限,若无此权限先授权。...create index emp_deptno_index on emp(deptno); 复合索引:基于两个列或多个列的索引在同一张表上可以有多个索引,但是要求列的组合必须不同。...(占用内存空间) 2.更新数据时,系统需有额外的时间来同时对索引进行更新,维持数据和索引的一致性。(除了查询操作,其他都慢) 因此,不恰当的索引不但于事无补,反而会降低系统性能。...因为大量的索引在进行插入,修改和删除操作时比没有索引花费更多的系统时间。
分区索引(或索引分区)主要是针对分区表而言的。随着数据量的不断增长,普通的堆表需要转换到分区表,其索引呢,则对应的转换到分区索引。分区索引的好处是显而易见的。...1、分区索引的相关概念 a、分区索引的几种方式:表被分区而索引未被分区;表未被分区,而索引被分区;表和索引都被分区 b、分区索引可以分为本地分区索引以及全局分区索引 本地分区索引: 本地分区索引信息的存放依赖于父表分区...全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即索引列必须包含分区键。 全局索引分区中,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区。 ...前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。 有前缀索引: 有前缀索引包含了分区键,即分区键列被包含在索引中。 有前缀索引支持本地分区索引以及全局分区索引。...-------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi SQL
索引碎片整理实例 select * from user_indexes; select * from user_ind_columns; --建立表、索引: create table t (id int...loop insert into t values (i); if mod(i, 100)=0 then commit; end if; end loop; end; --分析索引
函数索引 在Oracle中,有一类特殊的索引,称为函数索引(Function-Based Indexes,FBI),它基于对表中列进行计算后的结果创建索引。...函数索引在不修改应用程序的逻辑基础上提高了查询性能。如果没有函数索引,那么任何在列上执行了函数的查询都不能使用这个列的索引。当在查询中包含该函数时,数据库才会使用该函数索引。...函数索引可以是一个B-Tree索引或位图索引。 踩坑背景 1.生产环境某交易表数据量大约在20w左右,在根据具体条件查询时,发现查询特别慢。...( initial 9M next 1M minextents 1 maxextents unlimited ); 4.但是再次查询时发现,查询依旧很慢,通过查看Oracle...maxtrans 255 storage ( initial 9M next 1M minextents 1 maxextents unlimited ); 6.使用Oracle
数据库索引是为了提高查询速度的一种数据结构。 索引的创建语句 索引的创建语句非常简单。 CREATE INDEX 索引名 ON 表名(列名); 除了单列索引,还可以创建包含多个列的复合索引。...CREATE INDEX 索引名 ON 表名(列名1, 列名2, 列名3, ...); 删除索引也非常简单。 DROP INDEX 索引名; 查看某个表中的所有索引也同样简单。...3.如果经常在某表的一个字段上进行Order By的话,则也应该在这个列上建立索引。 4.不应该在小表上建立索引。 索引的优缺点 索引主要是为了提高数据的查询速度,这就是索引的优点。...关于查询优化器 当Oracle拿到SQL语句的时候,会使用查询优化器去分析该语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行的查询计划,而不是SQL语句。...因此,CBO一旦发现有索引的存在,并且这个索引能帮助提高查询速度,就是使用通过索引进行查询的方法。
Oracle唯一索引在字段全部为NULL时,不做唯一性判断,允许重复插入,而在8t中即使均为NULL值也会做重复值判断,在某些场景下客户会存在此类需求,在数据量不大不存在性能问题的情况下可以考虑通过如下方式进行替代...“informix”.secconstitute (sec_id,meas_id,constitute_type, order_no) using btree in dbs3; 思路 1.删除原唯一索引替换为普通索引维持索引功能
--根据索引名,查询表索引字段 select * from user_ind_columns where index_name='索引名'; --根据表名,查询一张表的索引 select * from...'; 一.oracle 表加索引 首先,查看目前已经建立的索引 select index_name from all_indexes where table_name = 'table1'; 2.接着,...user_idx on table (userid); 3.再重复第一步,验证一下,是否成功 二.oracle表删除索引 相信不少人遇到过ORA-02429: cannot drop index used...[oracle@DB-Server ~]$ oerr ora 2429 02429, 00000, “cannot drop index used for enforcement of unique/primary...主键修改&设置某一字段可以为null 1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns where
1、创建索引 create index 索引名 on 表名(列名); 2、删除索引 drop index 索引名; 3、创建组合索引 create index 索引名 on 表名(列名1,列名...2,列名3,…); 查看目标表中已添加的索引 –在数据库中查找表名 select * from user_tables where table_name like ‘tablename%’; –查看该表的所有索引...select * from all_indexes where table_name = ‘tablename’; –查看该表的所有索引列 select* from all_ind_columns
1.索引分类 a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率 b)一般索引,只有数据索引的作用, 2.唯一索引的建立 create unique index 索引名...on employee(empname); 3.一般索引 create index 索引名 on 表名(字段名) ok,现在我们为employee的address字段,添加一般索引 create index...,field2 desc); 4.函数索引 如果在我们的查询条件使用了函数,那么索引就不可用了。...price字段上做的索引了 ok,我们来创建函数索引 create index index_price on product(nvl(price,0.0)); 5.索引的删除 drop index 索引名...drop index idx_empname; 6.其它的 唯一索引能极大的提高查询速度,而且还有唯一约束的作用 一般索引,只能提高30%左右的速度 经常插入,修改,应在查询允许的情况下,尽量减少索引
一、索引 1、添加索引 create index 索引对象名 on 索引对应表名(表内索引对象字段名); 例:需创建包含userid属性的userinfo表。...create index userid on system.userinfo(userid); 2、删除索引 drop index 索引对象名; 例: drop index userid; 二、视图
♣ 题目部分 在Oracle中,如何监控索引的使用状况?...监控索引有两种方式: 1、直接监控索引的使用情况 (1)设置所要监控的索引:ALTER INDEX IDX_T_XX MONITORING USAGE; (2)查看该索引有没有被使用:SELECT *...通过一段时间的监控,就可以确定哪些是无用的索引。...另外,为了避免使用V$OBJECT_USAGE只能查询到当前用户下索引的监控情况,可以使用如下语句查询数据库中所有被监控索引的使用情况: SELECT U.NAME OWNER, IO.NAME...& 说明: 有关索引的监控过程可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2120752/ 本文选自《Oracle程序员面试笔试宝典》,作者:
看到 itpub 论坛上的一个帖子,对 Oracle 的索引分类总结得言简意赅,于是收藏过来。又补充了一点RAC用到的反向索引的东西。...逻辑上: Single column 单列索引 Concatenated 多列索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 ...物理上: Partitioned 分区索引 NonPartitioned 非分区索引 B-tree: Normal 正常型B树 Rever Key 反转型B树 Bitmap 位图索引 索引结构:...; Bitmap: 适合于决策支持系统; 做UPDATE代价非常高; 非常适合OR操作符的查询; 基数比较少的时候才能建位图索引; 树型结构: 索引头 开始ROWID,结束ROWID(先列出索引的最大范围...,降低索引叶块的争用; 参考 http://www.stcore.com/oracle/2006-06-15/1150309026d27150.html
2.索引删除规范 若确认需要做索引删除,可以使用Oracle提供的两个功能特性协助判断删除索引是否会有隐患。...2.1 增加索引监控 将计划要删除的索引经过至少一个业务周期(具体业务确认业务周期为多久,注意要考虑到跑批场景)的监控,如果整个业务周期,该索引一直没有被使用过则可以考虑删除。...IDX_T_01,使用下面语句开启该索引的监控。...------ ------------------------------ IDX_T_01 T YES YES 07/22/2020 14:15:18 如果不再需要监控该索引...,可以这样取消该索引的监控: alter index jingyu.IDX_T_01 nomonitoring usage; INDEX_NAME TABLE_NAME MONITO USED
领取专属 10元无门槛券
手把手带您无忧上云