索引
1.索引是数据库对象之一,用于加快数据的检索,在数据库中索引可以减少数据库程序查询结果时需要读取的数据量。
2.索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率
3.索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
4.索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动
5.管理索引,索引删除,不会对表产生影响
6.索引对用户是透明的,无论表上是否有索引,sql语句的用法不变
7.oracle创建主键时会自动在该列上创建索引
创建索引
create Index 索引名 on 表名(表字段);
自动创建: 在定义 primary key或 unique约束后系统自动在相应的列上创建唯一性索引
例子:
手动创建: 用户可以在一个或多个列上创建非唯一的索引,以加速查询
例子:
以下情况可以创建索引:
1.列中数据值分布范围很广
2.列经常在 where子句或连接条件中出现
3.表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%
下列情况不要创建索引:
1.表很小
2.列不经常作为连接条件或出现在where子句中
3.查询的数据大于2%到4%
4.表经常更新
创建索引的优缺点:
优点:索引不需要用,只是说我们在查询有添加索引字段的时候,速度会更快。
缺点:虽然查的速度快了,但插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。
查询索引
可以使用数据字典视图user_indexes和 user_ind_columns 查看索引的信息
例子:
drop index删除索引
1.只有索引的拥有者或拥有drop any index权限的用户才可以删除索引
2.无法删除用于强制唯一/主键的索引,只能删除手动添加的非唯一性索引;
3.删除操作是不可回滚的
使用drop index命令删除索引
格式:drop index 索引名;强制唯一/主键的索引不可删例子:
手动添加的非唯一性索引可删例子: