Oracle索引管理
2009-06-23 11:50:26 来源:WEB开发网使字段带函数再查询
SQL> select * from t where i=upper('a');
Execution Plan
------------------------------------------------------------
Plan hash value: 1601196873
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 25 | 7 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 1 | 25 | 7 (0)| 00:00:01 |
-----------------------------------------------------------------
可见当给索引安段加上函数后就不使用索引了
6.简单优化
上面我们可以看到当对索引安段加上一些选项时就不再使用索引了,为了在查询时一定使用索引,可对参数optimizer_index_cost_adj进行设置,它的取值范围是1---10000,值越小就越使用索引,而值越大就越全盘扫描
查看当前参数据值
SQL> show parameter optimizer_index_cost_adj
NAME TYPE VALUE
-------------------- ----------- ------------------------------
optimizer_index_cost_adj integer 100
为了多使用索引,可减小它的值
SQL> alter system set optimizer_index_cost_adj=10;
System altered.
然后用索引字段使用了函数的语名查询
SQL> select * from t where i=upper('a');
| 0 | SELECT STATEMENT | | 1 | 25 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 25 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | TI_IND | 1 | | 1 (0)| 00:00:01 |
可见它此时也使用索引查询了
进一步设置
为了进一步优化,oracle建议对小表不要建索引,那什么为小表呢,oracle一次I/O就可读写完整个表的表为小表,查看oracle10g一次读写的数据量
SQL> show parameter db_file_multiblock_read_count
NAME TYPE VALUE
---------------------- ----------- ------------------------------
db_file_multiblock_read_count integer 128
可见当表小于128k时就不要建索引了
删除索引
SQL>drop index indexname
文章来源:http://chenxy.blog.51cto.com/729966/168948
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接