索引:
索引是由用户创建,能够被修改和删除的,实际存储在数据库中的物理存在,它是某一个表中【一列或者若干列】值的集合和相应的指向表中物理标志这些值的数据页的逻辑指针清单。
数据库中索引(Index)的概念与目录的概念非常类似。如果某列出现在查询的条件中,而该列的数据是无序的,查询时只能从第一行开始一行一行的匹配。创建索引就是对某些特定列中的数据排序,生成独立的索引表。在某列上创建索引后,如果该列出现在查询条件中,Oracle会自动的引用该索引,先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可以根据ROWID快速的定位到具体的记录,表中的数据非常多时,引用索引带来的查询效率非常可观。
·如果表中的某些字段经常被查询并作为查询的条件出现时,就应该考虑为该列创建索引。
·当从很多行的表中查询少数行时,也要考虑创建索引。有一条基本的准则是:当任何单个查询要检索的行少于或者等于整个表行数的10%时,索引就非常有用。
Oracle数据库会为表的主键和包含唯一约束的列自动创建索引。索引可以提高查询的效率,但是在数据增删改时需要更新索引,因此索引对增删改时会有负面影响。
例如如下问题:
NC薪資發放計算,以往平均計算是時間花費4秒,今日需耗時平均70秒,已清緩存後重登測試仍是此值,再請協助優化,THX!
计算时间变得长了很多,查询原因发现WA_DATA_TEMPW1表中没有添加索引。
语法结构:创建索引
CREATE [UNIQUE] INDEX index_name ON table_name(column_name[,column_name…]) |
语法解析:
1. UNIQUE:指定索引列上的值必须是唯一的。称为唯一索引。
2. index_name:指定索引名。
3. tabl_name:指定要为哪个表创建索引。
4. column_name:指定要对哪个列创建索引。我们也可以对多列创建索引;这种索引称为组合索引。
增加索引
create indexWA_DATA_TEMPW1_idx1 on WA_DATA_TEMPW1 (pk_wa_data);
create indexWA_DATA_TEMPW1_idx2 on WA_DATA_TEMPW1 (workorg);
create indexWA_DATA_TEMPW1_idx3 on WA_DATA_TEMPW1 (PK_WA_CLASS, CYEAR, CPERIOD, PK_PSNJOB);
create indexWA_DATA_TEMPW1_idx4 on WA_DATA_TEMPW1 (PK_ORG);
create indexWA_DATA_TEMPW1_idx5 on WA_DATA_TEMPW1 (PK_PSNDOC);
create indexWA_DATA_TEMPW1_idx6 on WA_DATA_TEMPW1 (PREWADATA);
create indexWA_DATA_TEMPW1_idx7 on WA_DATA_TEMPW1 (PK_WA_CLASS, CYEAR, CPERIOD, PK_PSNDOC);
增加索引后计算的时间就降下来了。