oracle 索引

1.创建索引

CREATE INDEX    index_name  ON  建索引的表 (索引字段)  TABLESPACE 表空间

2.删除索引

drop index index_name

3.索引的注意事项

1)索引应该在SQL语句中“Where”或者“and”部分涉及的表的列创建。    

2)Order by中用索引。需要注意的是Order by中所有的列都包含在相同的索引中并保持在索引中的排列顺序,且order by中所有的列必须定义为非空,否则索引无效。    

 3)避免改变索引列的类型。       

            例如:select * from EMP              where EMP_TYPE='123'       

                     事实上oracle在执行的时候,会执行如下语句:             

                     select * from EMP              where EMP_TYPE=to_number('123')       

                     这样类型转化并没有发生在索引列上,所以索引仍旧有效,但是,如果写成这样,索引就会失效的。          

                     select * from EMP           where to_number(EMP_TYPE)=123      

                     因为索引列的类型发生了变化,所以索引失效了。    

 4)在经常用在连接上的列上创建索引,可以加快连接的速度,这些列主要是一些外键。    

 5)在主键列上创建索引,可以强制该列的唯一性并且组织表中的数据的排列结构。

 6)对于列值经常修改变动的列,不适合创建索引,因为增加索引会降低修改性能,同样,增加修改性能会降低索引性能。

 7)对于只有很少数据值的列也不应该增加索引,因为结果集的数据行占据了表中数据行的很大比例,增加索引并不能增加检索速度。

8)在Where子句中需要特别注意的是,不是所有的索引列都会有效。    

           例如:       

                 a)在where 子句中使用了 “!=”这样索引也是无效的,       

                  b)除此之外还有使用“||"字符拼接,也会导致索引失效。

                  c) 还有相同索引列也不能用来比较,也会导致索引失效。

                 d) IS NULL 和 IS NOT NULL也会导致索引失效。

                 e) 函数的使用,也会导致索引失效  

                 f) 通配符的使用,所以也会失效             

-我们在name上创建索引;

create index index_name on student('name'); --下面的方式oracle不适用name索引 select * from student where name like '%wish%'; --如果通配符出现在字符串的其他位置时,优化器能够利用索引;如下: select * from student where name like 'wish%';

             g) not的使用,所以也会失效



猜你喜欢

转载自blog.csdn.net/lk_0518/article/details/79715325
今日推荐