概念及作用 :在oracle中,索引是一种供服务器在表中快速查找一个行的数据库结构。在数据库中建立索引主要有以下作用。 (1)快速存取数据。 (2)既可以改善数据库性能,又可以保证列值的唯一性。 (3)实现表与表之间的参照完整性。 (4)在使用orderby、groupby子句进行数据检索时,利用索引可以减少排序和分组的时间。 (5)减少I/O操作。 (5)消除磁盘排序。
Oracle索引(index)最大的作用是用来优化数据库查询的效率,提升数据库的查询性能。就好比书的目录一样,可以通过目录来直接定位所需内容存在的页数,大大提高检索效率。
|
创建索引: 注意: index的存储也是需要存储空间的,oracle里逻辑存储空间就是表空间,索引肯定要为index指定表空间的。 例如: 唯一索引 用create unique index语句来创建唯一索引, 例: create unique index dept_unique_idx on dept(dept_no) tablespace tablespace_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 列(索引列的后面列) 则将不会走索引,将会进行全表扫描。
基于函数的索引 常用与UPPER、LOWER、TO_CHAR(date)等函数分类上 create index idx_func on emp (UPPER(ename)) tablespace tablespace_name; 位图索引 对基数较小,且基数相对稳定的列建立索引时,首先应该考虑位图索引, create bitmap index idx_bitm on class (classno) tablespace tablespace_name; 与约束相关的索引 可以用using index字句,为与unique和primary key约束相关的索引, 例: alter table table_name add CONSTRAINT PK_primary_keyname primary key (field_name) ----> 添加约束,主键 using index tablespace tablespace_name; |
什么时候创建索引:1、Oracle 数据库会为表的主键和包含唯一约束的列自动创建索引,所以在建立唯一约束时,可以考虑该列是否必要建立。是否经常要作为查询条件。 2、如果某个表的数据量较大(十几二十万以上),某列经常作为where的查询条件,并且检索的出来的行数经常是小于总表的5%,那该列可以考虑建立索引。 3、对于两表连接的字段,应考虑建立索引。若经常在某表的一个字段进行Order By ,则建议建立索引。 4、不应该在小表上建立索引。小表之间查询的数据会比建立索引的查询速度更快,但是在某些字段,如性别:只有男、女和未知三种数据时,可以考虑位图索引,可以增加查询效率。 5、经常进行DML操作,即经常进行增删改的操作的表,创建表索引时就要权衡一下,因为建索引会导致进行DML操作时速度变慢。所以可以根据实际情况,选择某些字段建立索引,而不能盲目乱建。
6、列中有许多空值,不适合建立索引;Date型列一般适合基于函数的索引(列中的值相对比较唯一)。 |
索引副作用: 建立索引不仅仅要浪费空间来存储索引表,当数据量较少时,直接查询数据比经过查询索引表再定位到表数据的速度更快。索引可以提高查询的效率,但是在数据增删改时需要更新索引,因此索引对增删改时会有负面影响。 |
索引的类别:逻辑上: NonUnique 非唯一索引;Function-based函数索引;Domain 域索引 物理上: B-tree: Normal 正常型B树;Rever Key 反转型B树 ;Bitmap 位图索引 b-tree索引: bitmap位图索引: 函数索引: hash索引: reverse反向索引: 分区索引和分区表的全局索引: |
Oracle索引
最新推荐文章于 2023-08-27 20:09:23 发布