索引的使用

来源:互联网 发布:xampp安装教程 linux 编辑:程序博客网 时间:2024/06/05 06:26

1.创建表

create table ZZTEST(  ID             NUMBER not null,  SERVICE_TPYEID VARCHAR2(22),  TOTALPRICE     NUMBER,  constraint TEST_PK primary key (ID));
2.创建索引

create index TESTNAME on ZZTEST (SERVICE_TPYEID);
3.删除索引

drop index testname;
4.监控索引使用情况

alter index testname monitoring usage;
5.查看索引使用状态

select TABLE_NAME,INDEX_NAME,USED,T.* from v$Object_usage T    /* where T.index_name='TESTNAME' */;
其中,TESTNAME必须大写;USED 为YES表示已使用,为NO表示未使用
注意:SELECT * FROM V$OBJECT_USAGE; 只能查看当前用户下被监控的索引信息。即使sys、system用户也不能查看其它用户的信息。
6.强制使用索引
select /*+index(zztest testname)*/t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid='f82f28bcad934a5d';
注意:/*+index(zztest testname)*/中间不能有空格
7.使索引失效

select t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid like '%f82f28bcad934a5d';
 失效的方式有多种,如下(没有每一个都进行确认,%已确认,其他待确认):

    1,使用不等号<>
            2,单独的>,<,(有时会用到,有时不会)
            3,like "%_" 百分号在前.
            4,表没分析.
            5,单独引用复合索引里非第一位置的索引列.
            6,字符型字段为数字时在where条件里不添加引号.
            7,对索引列进行运算.需要建立函数索引.
            8,not in ,not exist.
            9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
           10, 索引失效。
           11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
           12,有时都考虑到了 但就是不走索引,drop了从建试试在
           13,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null   都会走
           14,联合索引 is not null 只要在建立的索引列(不分先后)都会走, in null时   必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列都满足is null的时候),或者=一个值;当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

8.重建失效的索引

‍alter index 索引名 rebuild 【online】
如:alter index testname rebuild;
9.取消监控某一个索引

暂时没找到方法


注意:

1.监控器monitor只能统计到截止当前时间,索引A的使用状态,如果存在某sql使用了索引A,那么监控就会修改USED=YES,即使有sql使索引失效,查询v$Object_usage时得到的USED也可能是YES。要查看某个sql是否使用索引,必须重新执行以下步骤:

---1).重建索引alter index testname rebuild;---2).重新加入监控alter index testname monitoring usage;---3).要查看的sqlselect t.service_tpyeid,t.id,t.totalprice from zztest t where t.service_tpyeid like '%f82f28bcad934a5d';---4).查看监控select TABLE_NAME,INDEX_NAME,USED from v$Object_usage T;
2.如果要查看程序是否使用索引,需要在启动项目前将索引加入监控。待程序执行一段时间后再查看监控情况即可。


以上是个人测试的结果,如有问题请大神指出原因。


0 0
原创粉丝点击