索引
1、什么是索引?索引的常见类型有什么?
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
建设原则:
1、索引应该经常建在Where 子句经常用到的列上。如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%。则应该考虑。
2、对于两表连接的字段,应该建立索引。如果经常在某表的一个字段进行Order By 则也经过进行索引。
3、不应该在小表上建设索引。
2、分类:我们主要介绍常见的聚集索引和非聚集索引
聚集索引:对正文内容按照一定规则排列的目录称为聚集索引。
比如图书馆新进了一批书。那么这些书需要放到图书馆内。书如何放呢?一般都有一个规则,杂志类的放到101房间,文学类的放到102房间,理工类的放到103房间等等。这些存储的规则决定了每本书应该放到哪里。而这个例子中聚集索引为书的类别。
非聚集索引:目录自己按照一定规则排列,正文自己按照另一种规则排列,目录主要是保存对正文的一个映射关系,这种称为非聚集索引。
继续使用上述提到的例子: 同学如果想去图书馆找一本书,而不知道这本书在哪里?那么这个同学首先应该找的就是检索室。对于要查找一本书来说,在检索室查是一个非常快捷的的途径了。但是,在检索室中你查到了该书在XX室XX书架的信息。但是你的查询并没有结束,你仅仅找到了目的书的位置信息,你还要去该位置去取书。
对于这种方式来说,你需要两个步骤:
(1)查询该记录所在的位置。
(2)通过该位置去取要找的记录。
3、索引的优点和缺点
优点:大大加快数据的检索速度(主要原因)。
缺点:创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
索引需要占物理空间。
1、索引主要进行提高数据的查询速度。 当进行DML时,会更新索引。因此索引越多,则DML越慢,其需要维护索引。 因此在创建索引及DML需要权衡。
创建索引:
单一索引:Create Index <Index-Name> On <Table_Name>(Column_Name);
复合索引: Create Index i_deptno_job on emp(deptno,job); —>在emp表的deptno、job列建立索引。
select * from emp where deptno=66 and job='sals' ->走索引。
select * from emp where deptno=66 OR job='sals' ->将进行全表扫描。不走索引
select * from emp where deptno=66 ->走索引。
select * from emp where job='sals' ->进行全表扫描、不走索引。
如果在where 子句中有OR 操作符或单独引用Job 列(索引列的后面列) 则将不会走索引,将会进行全表扫描。
4、索引的创建和使用
create index 索引名 on 表名(列名);
注:对于主键或者唯一键,server会自动加索引。
索引使用方法:不用特意使用,Oracle会自动处理。
- 删除索引
DROP INDEX indexname;