摘要: 总结得出以下3点结论:a、非归档模式下,只需append就能大量减少redo的产生;归档模式下,只有append+nologging才能大量减少redo。b、insert /*+ append */ 时会对表加锁(排它锁),会阻塞表上的除了select以外所有DML语句;传统的DML在TM enqueue上使用模式3(row exclusive),其允许其他DML在相同的模式上获得TM enqueue。但是直接路径加载在TM enqueue使用模式6(exclusive),这使其他DML在直接路径加载期间将被阻塞。c、insert /*+ append */ 直接路径加载,速度比常规加载方式快 阅读全文
posted @ 2012-04-01 17:04 wbzhao 阅读(5738) 评论(1) 推荐(0) 编辑
摘要: Oracle Spatial空间索引 Oracle Spatial可对空间数据进行R-tree索引,每个空间图层(Spatial Layer)的空间索引元信息都可以在USER_SDO_INDEX_METADATA视图中找到。 具体的索引数据保存在MDRT字段开头的表中, 每个空间图层都会对应一个索引表(表的格式是MDRT_[...]$),空间索引表中的主要数据是MBR 通过空间索引元数据视图(USER_SDO_INDEX_METADATA)可以查到每个空间图层的空间索引名、空间索引数据表名、R-tree索引的根节点ROWID,R-tree的分支因子(又叫扇出fanout,即R-tree节点的最 阅读全文
posted @ 2012-04-01 16:51 wbzhao 阅读(800) 评论(0) 推荐(0) 编辑
摘要: 关于字符和数字类型的索引,Oracle如何实现内部自动转换以及索引使用的验证测试发表人:tomszrp | 发表时间: 2006年二月10日, 18:51起因:今天早上有同事问我如下语句为什么执行很慢:select * from tbcs.acc_bank_debit_info a where a.region=534 and a.status=1 and a.accountid=(select accountoid from tbcs.subscriber b where b.status='US10' and b.region=534 and b.servnumber=13 阅读全文
posted @ 2012-04-01 15:13 wbzhao 阅读(2211) 评论(0) 推荐(0) 编辑
摘要: 分区索引--本地索引和全局索引比较 本文基于oracle10gR2分区索引分为本地(local index)索引和全局索引(global index)。其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引。而全局索引目前只支持有前缀的索引。B树索引和位图索引都可以分区,但是HASH索引不可以被分区。位图索引必须是本地索引。下面就介绍本地索引以及全局索引各自的特点来说明区别;一、本地索引特点:1. 本地索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,本地索引的分区机制和表的分区机制一样。2. 如果本地索引的索引列以分区键开... 阅读全文
posted @ 2012-04-01 10:57 wbzhao 阅读(17430) 评论(0) 推荐(2) 编辑
摘要: 使用call在sqlplus中调用procedure和funtion!call 不可以使用在plsql中,只能在sqlplus中使用。SQL> create or replace procedure proc_test2 is3 v_count number;4 begin5 select count(*) into v_count from tt;6 dbms_output.put_line(v_count);7 end;8 /过程已创建。SQL> set serveroutput onSQL> call proc_test();2调用完成。--使用call调用过程时即使过 阅读全文
posted @ 2012-03-31 16:58 wbzhao 阅读(1643) 评论(0) 推荐(0) 编辑
摘要: 首先说如何编译扩展名为sql的sql脚本.sqlplus system/admin@orcl @D:\P_CREATE_TABLE.sql这样就可以了。需要注意的是这样的做法只是在服务器上编译和生成了这个脚本,并不是执行了这个脚本中的内容。需要注意的是1.要在语句的最后加上一个/符号,否则不会执行。2.需要写全脚本的路径。3.可以用@@来代替,这个条件是执行的脚本需要在当前路径下。脚本例子如下:CREATE OR REPLACE PROCEDURE P_CREATE_TABLE(TABLENAME IN VARCHAR2) ASBEGIN EXECUTE IMMEDIATE 'CREA 阅读全文
posted @ 2012-03-31 16:40 wbzhao 阅读(1710) 评论(0) 推荐(0) 编辑
摘要: 问题如下:SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 Connected as scott。。。。。。SQL> drop table student2;drop table student2ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效=========================================================解决方法如下:========== 阅读全文
posted @ 2012-03-30 00:15 wbzhao 阅读(669) 评论(0) 推荐(0) 编辑
摘要: 在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如: SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM, 阅读全文
posted @ 2012-03-30 00:09 wbzhao 阅读(1250) 评论(0) 推荐(0) 编辑
摘要: oracle 使用leading, use_nl, rownum调优1、使用leading和use_nl来设置表的查询顺序,来加快查询速度,一般把小表设为第一个表。/*+LEADING(TABLE)*/ 将指定的表作为连接次序中的首表./*+USE_NL(TABLE)*/ 将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.成本计算方法:设小表100行,大表100000行。两表均有索引:如果小表在内,大表在外(驱动表)的话,则扫描次数为:100000+100000*2 (其中2表示IO次数,一次索引,一次数据)如果大表在内,小表在外(驱动表)的话,则扫描次数为:100+100*2.两.. 阅读全文
posted @ 2012-03-30 00:08 wbzhao 阅读(741) 评论(0) 推荐(0) 编辑
摘要: Oracle中所谓表的连接,有两种含义。一种是根据Oracle内部的连接判断方式区分的内部连接类型,这会影响到系统优化、资源占用等问题。另一种是基于查询的方式,对两张表之间建立联系,会影响到查询的结果,这里都写一下。一、Oracle 中的表内部连接有 3类 : 1、 嵌套循环连接( Nested Loops ) 原理:扫描一个表,每读取驱动表的一条记录,就根据索引去另一个表里面查找,所有匹配记录放在结果集中,然后再读取驱动表的下一行。没有索引一般就不会是 nested loops 。 条件:驱动表结果集不大,被驱动表连接字段要有索引。 特点:使用嵌套循环连接是从连接结果中提取第一批记录的... 阅读全文
posted @ 2012-03-30 00:02 wbzhao 阅读(1199) 评论(1) 推荐(0) 编辑