Oracle索引
索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
在数据库系统中建立索引主要有以下作用:
1)快速取数据;
2)保证数据记录的唯一性;
3)实现表与表之间的参照完整性;
4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间
创建oracle有效索引规则:
1、如果需要访问的数据不超过4%或5%,则可以使用索引。访问表中的行数据的另一种方法是从头到尾的顺序读取整个表,这称为全表扫描。全表扫描适用于请求的数据占全表数据百分比较高的查询。
2、相对较小的表应避免使用索引;
3、为所有表创建主键。在指定一列作为主键时,oracle自动创建该列索引;
4、对在where字句中频繁使用的列建立主键;
5、对包括在orader by 和group by 操作的列或涉及排序的union和distinct等其他操作中的列建立索引。由于索引已经被排序,因此执行前述操作的排序要求将显著减少;
6、只对有高选择性的表建立索引。既选择对几乎没有相同值得表建立索引
7、被频繁更改的列由于涉及开销问题,理论上不索引
8、如果一个表很大,建立索引的时间很长,因为建立索引也会产生大量的redo信息,所以在创建索引时可以设置不产生或少产生redo信息。只要表数据存在,索引失败了大不了再建,所以可以不需要产生redo信息。
特殊类型索引:
1、位图索引
位图索引使用位图标识被索引的列值,该索引通常不适于有大量更新任务的表,但很适合数据仓库的应用。位图索引由表示索引中每列一个字位的流(0或1)组成
B-树索引 | 位图索引 |
适用高基数的数据 适于OLTP数据库 使用大量的空间 易于更新 |
适于低基数的数据 适于数据仓库应用 使用的空间相对少 难于更新 |
创建位图索引:
SQL>create bitmap index gender_idx on employee_gender) tablespace dbs1;
监控索引的使用
如何判断索引需要重建
1. analyze index your_index_name validate structure; 2. 查询索引碎片: select name, del_lf_rows, lf_rows, round((del_lf_rows/(lf_rows+0.0000000001))*100) frag_pct from index_stats 一般如果该索引的frag_pct>10%,那么就需要rebuild index |
查看索引统计信息:
使用索引查询一定能提高查询的性能吗?举出实例
不能,
索引就是一种特殊的查询表 数据库的搜索引擎可以利用它加速对数据的检索
就像书的目录 不需要查询整本书就可以找到想要的数据
优点:
加快访问速度 加强唯一性
缺点:
带索引的表在数据库中需更多的存储空间
操作数据的命令需更长时间 因为需要对索引更新