现在的位置: 首页 > 综合 > 正文

索引

2013年10月31日 ⁄ 综合 ⁄ 共 946字 ⁄ 字号 评论关闭

1.  使用索引可以直接和快速地访问表中的行。索引的目的是通过使用一个索引的路径来快速查找数据,从而减少必须的磁盘I/O操作。索引是由Oracle服务器自动使用和维护的。索引一旦创建,用户就不需要执行直接的操作了。索引在逻辑上和实际上都独立于他们索引的表。这意味着可以在任何时候创建和删除索引,而不会对基表或其他索引产生影响。当删除表时,相应的索引也会被删除。

2.  创建索引

自动创建:如果在表定义中定义了PRIMARY KEYUNIQUE约束,则系统会自动创建一个唯一索引。(索引的名称和该约束的名称一样)

手动创建:可以在列上创建非唯一的索引,以加速对行的访问。

Create index emp_lastname_idx

On employees(last_name);

3.  什么情况下要创建索引:

列包含较大范围的值

列包含大量空值

where字句或连接条件中频繁使用一个或多个列

表相当大,但是预计多数的查询检索的行不到总行数的20%~40%

注:并不是表的索引越多,查询就会越快。对具有索引的表提交的每次DML操作,都意味着必须更新索引。与表关联的索引越多,在DML操作之后,Oracle服务器为更新全部索引所做的工作就越多。

4.  确认索引:

USER_INDEXES数据字典视图包含索引的名称及其唯一性

USER_IND_COLUMNS视图包含索引名、表名和列名。

Select ic.index_name, ic.column_name, ic.column_position col_pos, ix.uniqueness

From user_indexes ix, user_ind_columns ic

Where ic.index_name=ix.index_name and ic.table_name=’EMPLOYEES’

5.  基于函数的索引:

就是基于表达式的索引,索引表达式是用表列、常数、SQL函数和自定义函数构建的。

Create index upper_dept_name_idx

On departments ( UPPER(department_name))

   Select * from departments where UPPER(department_name)=’SALES’;

6.  不能更改索引,要更改只能先删除,再创建。

抱歉!评论已关闭.