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的使用,所以也会失效