ORACLE学习笔记之调节性能优化篇
2007-05-10 12:19:35 来源:WEB开发网核心提示: 这个语句仅仅是合并索引中同一级的leaf block,消耗不大,ORACLE学习笔记之调节性能优化篇(4),对于有些索引中存在大量空间浪费的情况下,有一些作用,往往可以是查询时间提交很多倍当然,我们也可以使用no_index提示,7.如何使用Hint提示在select/delete/upd
这个语句仅仅是合并索引中同一级的leaf block,消耗不大,对于有些索引中存在大量空间浪费的情况下,有一些作用。
7.如何使用Hint提示
在select/delete/update后写/*+ hint */
如
select /*+ index(TABLE_NAME INDEX_NAME) */ col1...
注意/*和+之间不能有空格,如用hint指定使用某个索引
select /*+ index(cbotab) */ col1 from cbotab;
select /*+ index(cbotab cbotab1) */ col1 from cbotab;
select /*+ index(a cbotab1) */ col1 from cbotab a;
其中
TABLE_NAME是必须要写的,且如果在查询中使用了表的别名,在hint也要用表的别名来代替表名;
INDEX_NAME可以不必写,Oracle会根据统计值选一个索引;
如果索引名或表名写错了,那这个hint就会被忽略;
8.怎么样快速复制表或者是插入数据
快速复制表可以指定Nologging选项
如:
Create table t1 nologging
as select * from t2;
快速插入数据可以指定append提示,但是需要注意noarchivelog模式下,默认用了append就是nologging模式的。 在archivelog下,需要把表设置程Nologging模式。
如
insert /*+ append */ into t1
select * from t2
注意:如果在9i环境中并设置了FORCE LOGGING,则以上操作是无效的,并不会加快,当然,可以通过如下语句设置为NO FORCE LOGGING。
Alter database no force logging;
是否开启了FORCE LOGGING,可以用如下语句查看
SQL> select force_logging from v$database;
9.怎么避免使用特定索引在很多时候,Oracle会错误的使用索引而导致效率的明显下降,我们可以使用一点点技巧而避免使用不该使用的索引,如:表test,有字段a,b,c,d,在a,b,c上建立联合索引inx_a(a,b,c),在b上单独建立了一个索引Inx_b(b)。在正常情况下,where a=? and b=? and c=?会用到索引inx_a,where b=?会用到索引inx_b,但是,where a=? and b=? and c=? group by b会用到哪个索引呢?在分析数据不正确(很长时间没有分析)或根本没有分析数据的情况下,oracle往往会使用索引inx_b。通过执行计划的分析,这个索引的使用,将大大耗费查询时间。当然,我们可以通过如下的技巧避免使用inx_b,而使用inx_a。 where a=? and b=? and c=? group by b||'' --如果b是字符 where a=? and b=? and c=? group by b+0 --如果b是数字通过这样简单的改变,往往可以是查询时间提交很多倍当然,我们也可以使用no_index提示,相信很多人没有用过,也是一个不错的方法:select /*+ no_index(t,inx_b) */ * from test t
where a=? and b=? and c=? group by b
举例:
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››笔记本蓝屏错误代码0X0000000A故障处理
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
赞助商链接