索引:
提高查询语句的效率
一、何时需要索引: 1.当我们经常需要查询,且列在where子句出现; 2.返回的行数,在我们总行数的%2以下,我们需要索引; 3.经常做DML操作的表不需要索引,因为表有多大索引就有多大,索引在后台需要维护,有索引在DML操作的时候,会对DML操作造成负担; 【DML操作变慢的原因:有列为我们的DML操作的数据建了索引,内存太小,内存脏数据太多,日志】 4.数据量大的表也不许要索引,否则查询数率反而慢; 二、分类: 1.B-tree :树形索引 单列索引:索引建到一个列中 组合所以/多列索引:索引以组合方式出现,多个列创建一个索引 唯一性索引:创建索引的列值是唯一的,通常唯一性索引不许要我们创建,由主键决定; 函数索引 :创建的索引的列,一以函数的形式出现; 反建索引:避免热点块的的读取 2.位图索引:经常要做查询操作,且数据量大 。查询语句中经常以all,or 连接的时候需要创建位图索引; 3.分区索引:在分区表中创建的索引, 本地索引:在分区表中,每一个分区都创建一个索引 全局索引:在分区表中,整个分区表只有一个索引 三、创建索引 1.树形索引 create index<> on tablenam(column); //单列索引 create [unqiue] index<> on tablenam(column);//唯一索引 2.位图索引 create bitmap index<> on tablenam(column);//位图索引 3.分区索引: create index<> on tablename<为分区表的名字>(column) local ;//本地索引 create index<> on tablename<为分区表的名字>(column) global; //全局索引 单列索引 : >>>create index ind_dept on aa(deptno) ; >>>select * from aa where deptno=1; //从索引中寻找 #索引段中以指针方式存放着数据块在磁盘中的位置 多列索引: >>>create index ind_dept_name on aa(deptno,dname); >>>select * from aa where deptno=1 and dname='aa'; 函数索引: >>>create index ind_number on aa(to_number(deptno)); 唯一性索引: >>> create unqiue index<> on aa(column); 反建索引: >>>create reverse index <> on aa<>; 位图索引: >>>select * from emp where deptno=10 or ename='SCOTT'; //适合传建位图索引 >>>create bitmap index bmap_emp on emp(ename); //位图索引 四、查看索引 desc user_indexes 导致索引失效的原因 1.当表做了维护的操作,比如行的移动 2.分区表中有增加和减少分区 五、维护索引: alter index <> rebuild;//索引重建, 1、用户在做DML操作,并且事务未结束,我们去重建索引会失败 2、正在重建索引,用户来做DML操作,会导致锁表,也会重建失败 所以,写成脚本,一般在业务空闲时操作大概是半夜 alter index <> unusable;//停用索引 drop index <> ; //删除索引