版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ORACLE4.1中国通信集团公司安徽信息系统部20107月修改记录版本日期编辑者编辑内容1.02006/2/10见春蕾形成初稿1.12007/8/31见春蕾依据实际状况修订局部章节见春蕾〔数据库使用注意事项中增加了关于批量更数据的大事务分次提交的改密码方法;2.02007/11/05二、在其次章〔SQL编写注意事项〕中增加了关于提示(Hints)的使用;〔SQL执行打算,阐述了相关的理SQL执行打算的跟踪方法。尹宁、王永波、涂定宏等节。3.02009/3/5以及SQL语句优化的根本规则。NG现状修改访问地址说明。ORACLE10G4.02010/7/12的内容,增加相关内容成标准涉及的内容四、刷SQL语句编写规章五、调整局部章节挨次NG现状修改访问地4.12012/9/11址说明。二、刷sql留意事项名目\l“_TOC_250044“第一章数据库使用留意事项 6第一章数据库使用留意事项 6\l“_TOC_250043“一、营业前台使用统一地址,后台业务严格区分业务区,不行随便访问 6\l“_TOC_250042“二、不涉及当天业务的查询和统计在BCV库中操作 6\l“_TOC_250041“三、前台营业时间制止在生产环境进展大数据量的查询和统计操作 6\l“_TOC_250040“四、关联表均很大的查询和统计尽量用BCV库 6五、依据业务规章进展DML操作,DML不要遗忘执行COMMIT或ROLLBACK 7\l“_TOC_250039“六、大批量更数据的事务分次提交 7\l“_TOC_250038“七、数据库DDL操作由数据库治理员依据业务规章进展 7\l“_TOC_250037“八、数据库使用完毕准时断开连接,但也不要频繁的连接和断开 7\l“_TOC_250036“九、客户端配置与客户端第三方工具使用 7\l“_TOC_250035“十、不要使用工具进展可视化数据修改操作 7\l“_TOC_250034“十一、合理使用帐号,妥当保管密码 7\l“_TOC_250033“十二、严禁在生产库进展业务开发、调试工作 8\l“_TOC_250032“十三、单条SQL语句的长度最好不要超过1000字节 8\l“_TOC_250031“十四、数据导出导入使用expdp/impdp,不要使用exp/imp 8十五、PL/SQL程序应尽量符合其次章要求,留意事务的提交、回滚及特别状况处理8\l“_TOC_250030“十六、肯定不能在循环体内部创立数据库的连接,包括通过JDBC连接数据库。 8\l“_TOC_250029“十七、SQL语句在执行前需要对语句规律进展检查,避开形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。 8\l“_TOC_250028“其次章SQL编写留意事项 9一、查看表字段名或随机少量数据时,不要使用SELECT*FROMTABLENAME 9\l“_TOC_250027“二、SELECT子句中避开使用* 9\l“_TOC_250026“三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。 9四、对分区表进展查询时,尽量把分区键作为查询条件的第一个条件 9五、无条件删除表中数据时,用TRUNCATE代替DELETE 9\l“_TOC_250025“六、查询语句中尽量使用表的索引字段,避开做大表的全表扫描 9\l“_TOC_250024“七、带通配符〔%〕的LIKE语句 10\l“_TOC_250023“八、用EXISTS替代IN 10\l“_TOC_250022“九、用NOTEXISTS替代NOTIN 10\l“_TOC_250021“十、尽可能用UNIONALL替换UNION 11\l“_TOC_250020“十一、ORDERBY语句建议 11\l“_TOC_250019“十二、避开使用NOT 11\l“_TOC_250018“十三、使用DECODE函数削减处理时间 12\l“_TOC_250017“十四、删除重复记录 12十五、假设可以使用WHERE条件,尽量不要在HAVING中限制数据 12十六、尽量不要使数据排序 12\l“_TOC_250016“十七、避开转变索引列类型 13\l“_TOC_250015“十八、避开在索引列上使用计算 13\l“_TOC_250014“十九、避开在索引列上使用ISNULL和ISNOTNULL 13\l“_TOC_250013“二十、子查询改写成表连接 13\l“_TOC_250012“二十一、使用索引的第一个列 14\l“_TOC_250011“二十二、削减对表的查询 14\l“_TOC_250010“二十三、SQL语句中:用>=替代> 14假设在ID列上建有索引,则语句SELECT*FROMEMPLOYEEWHEREID>=9要比语句SELECT*FROMEMPLOYEEWHEREID>8高效。这是由于前者DBMS将直接跳到第一个ID等于9的记录而后者将首先定位到8的记录并且向前扫描到第一个DEPT大于9的记录。 15\l“_TOC_250009“二十四、使用提示(hints) 15\l“_TOC_250008“二十五、大批量数据导入 15\l“_TOC_250007“二十六、DBLINK使用 15\l“_TOC_250006“二十七、绑定变量使用建议 16\l“_TOC_250005“第三章跟踪SQL执行打算 18\l“_TOC_250004“一、相关理论 18\l“_TOC_250003“1、ORACLE优化器 18\l“_TOC_250002“2、访问TABLE的方式 18\l“_TOC_250001“3、索引访问方式 18\l“_TOC_250000“二、SETTRACE跟踪SQL执行打算 19第一章数据库使用留意事项一、营业前台使用统一地址,后台业务严格区分业务区,不行随便访问营业网址需要通过4A系统统一使用“://10.153.176.6/“://10.153.176.6〔包含后台脚本及维护人员业务操作〕须严格依据业务区使用中间件及数据库实例,以避开影响数据库性能。A1:合肥、淮北中间件:10.153.171.125crmtux1/3〔主、10.153.171.126crmtux1〔备〕10.153.171.125bosstux1/3〔主、10.153.171.126bosstux1〔备〕数据库:WCRMA1、WACCTA1、WRES1A2:阜阳、宿州、亳州、池州中间件:10.153.171.126crmtux2/3〔主、10.153.171.125crmtux2〔备〕10.153.171.126bosstux2/3〔主、10.153.171.125bosstux2〔备〕数据库:WCRMA2、WACCTA2、WRES2B1:蚌埠、马鞍山、安庆、黄山、滁州中间件:10.153.171.135crmtux1/3〔主、10.153.171.136crmtux1〔备〕10.153.171.135bosstux1/3〔主、10.153.171.136bosstux1〔备〕数据库:WCRMB1、WACCTB1、WRES1B2:芜湖、淮南、铜陵、六安、宣城中间件:10.153.171.136crmtux2/3〔主、10.153.171.135crmtux2〔备〕10.153.171.136bosstux2/3〔主、10.153.171.135bosstux2〔备〕数据库:WCRMB2、WACCTB2、WRES2二、不涉及当天业务的查询和统计在BCV库中操作BCV库每天0时同步一次〔历时约1小时库是单节点数据库,共有WCRMABCV、WCRMBBCV、WACCTABCV、WACCTBBCV和WRESBCV等五个库。BCVTBS_PERSON表空间是可写表空间。三、前台营业时间制止在生产环境进展大数据量的查询和统计操作前台营业时间一般为8:00-18:0〔顶峰时间8:30-10:315:00-16:3生产环境做大数据量的查询和统计,每个查询的执行时间掌握在1分钟内。四、关联表均很大的查询和统计尽量用BCV库大表关联查询操作一般会占用较大的临时表空间和较高CPU,对数据库影响较大,尤其是多个大表关联且涉及排序、分组等操作时。五、依据业务规章进展DML 操作,DML 不要遗忘执行COMMIT或ROLLBACK不要只执行语句,而不掌握事务。当执行一条DML语句时,数据库会安排相应锁、回滚段、REDOLOGBUFFER等资源。语句执行后应尽快的提交或回滚释放安排的资源。六、大批量更数据的事务分次提交10100万的数据刷尽量在系统空闲时进展,并分次提交,以削减特别发生。七、数据库DDL操作由数据库治理员依据业务规章进展DDL操作有可能涉及到存储安排、表分析、数据生命周期规划等,须数据库治理员执行,业务人员不能使用预设帐号执行DDL语句。八、数据库使用完毕准时断开连接,但也不要频繁的连接和断开“完毕任务”kill-9。假设正在执行SQL时发生终端特别,联系数据库治理员检查处理,以防止数据库始终占用该SQL相关资源。九、客户端配置与客户端第三方工具使用Oracle客户端版本要求在10.2.0.4及以上,以尽量避开消灭兼容性问题。第三方工具PL/SQLDeveloper8.0及以上,ToadforOracle10.0及以上,DBArtisan8.5及以上。十、不要使用工具进展可视化数据修改操作操作须直接用SQL语句进展。十一、合理使用帐号,妥当保管密码个人帐号能进展的操作不要使用应用帐号执行人帐号密码,密码应不低于8位,并含有字母、数字和特别字符,且不能同于前五次密码。〔应用帐号被锁定时联系数据库治理员解决。十二、严禁在生产库进展业务开发、调试工作十三、单条SQL语句的长度最好不要超过1000字节10001000500段、存储过程或临时表解决。十四、数据导出导入使用expdp/impdp,exp/imp十五、PL/SQL程序应尽量符合其次章要求,留意事务的提交、回滚及特别状况处理十六、肯定不能在循环体内部创立数据库的连接,包括通过JDBC连接数据库。十七、SQL语句在执行前需要对语句规律进展检查,避开形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。其次章SQL编写留意事项—、查看表字段名或随机少量数据时,不要使用SELECT * FROMTABLENAMEDESCTABLENAMESELECT*FROMTABLENAMEWHERE1=2、SELECT*FROMTABLENAMEWHEREROWNUM<1等命令查看表构造信息,尽量不要直接执行SELECT*FROMTABLENAMEkill会话。二、SELECT子句中避开使用*在SELECT子句中列出全部的列时,使用*ORACLE在解析过程中会查询数据字典,将*依次转换成全部的列名。所以,直接在SELECT子句中写出想要显示的列。三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。例如主键列为INDEX,使用COUNT(INDEX)能利用索引。四、对分区表进展查询时,尽量把分区键作为查询条件的第一个条件TRUNCATEDELETE使用DELETE删除表中记录未提交时TRUNCATE会更短。六、查询语句中尽量使用表的索引字段,避开做大表的全表扫描例如:WHERESELECT*FROMEMPLOYEEWHEREFIRST_NAME||””||LAST_NAME=”BeillCliton”;这条语句没有使用基于LAST_NAME创立的索引。当承受下面这种SQL语句的编写,ORACLE系统就可以承受基于LAST_NAME创立的索引。SELECT*FROMEMPLOYEEWHEREFIRST_NAME=”Beill”ANDLAST_NAME=”Cliton”;七、带通配符〔%〕的LIKE语句例如:SQL语句:SELECT*FROMEMPLOYEEWHERELAST_NAMELIKE”%cliton%”;由于通配符〔%〕在词首消灭,所以OracleLAST_NAME的索引。如此使SELECT*FROMEMPLOYEEWHERELAST_NAMELIKE”c%”;EXISTSIN在很多基于根底表的查询中,为了满足一个条件,往往需要对另一个表进展联接。在这种EXISTS(NOTEXISTS)通常将提高查询的效率。SELECTSELECT*FROMFROMEMPWHEREWHEREEMPNO>0ANDANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=”MELB”);高效:SELECT*FROMEMPWHEREEMPNO>0ANDEXISTS(SELECT”X”FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=”MELB”);NOTEXISTSNOTIN在子查询中,NOTINNOTIN都是最低效的(由于它对子查询中的表执行了一个全表遍历)。为避开使用NOTIN,可以把它改写成外连接(OuterJoins)NOTEXISTS。例如:SELECT*FROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT=”A”);为了提高效率。改写为:SELECT*(SELECT*FROMFROMEMPA,DEPTBWHEREWHEREA.DEPT_NO=B.DEPT(+)ANDANDB.DEPT_NOISNULLANDANDB.DEPT_CAT(+)=”A”;(方法二:最高效)SELECTSELECT*FROMFROMEMPEWHEREWHERENOTEXISTS(SELECT”X”FROMFROMDEPTDWHEREWHERED.DEPT_NO=E.DEPT_NOANDANDDEPT_CAT=”A”);十、尽可能用UNIONALL替换UNION当SQL语句需要UNIONUNIONALL的方式被合并,然后在输出最终结果前进展排序。SELECTACCT_NUM,BALANCE_AMT假设用UNIONALL替代SELECTACCT_NUM,BALANCE_AMTFROMFROMDEBIT_TRANSACTIONSWHEREWHERETRAN_DATE=”31-DEC-95”UNIONUNIONSELECTSELECTACCT_NUM,BALANCE_AMTFROMFROMDEBIT_TRANSACTIONSWHEREWHERETRAN_DATE=”31-DEC-95”;SELECTSELECTACCT_NUM,BALANCE_AMTFROMFROMDEBIT_TRANSACTIONSWHEREWHERETRAN_DATE=”31-DEC-95”UNIONUNIONALLSELECTSELECTACCT_NUM,BALANCE_AMTFROMFROMDEBIT_TRANSACTIONSWHEREWHERETRAN_DATE=”31-DEC-95”;十一、ORDERBY语句建议ORDERBY语句打算了ORACLE如何将返回的查询结果排序。ORDERBY语句对要排序的列没有特别限制,也可以将函数参加列中。在ORDERBY语句中使用非索引项或有计算表达ORDERBY中全部的列定义为非空时会用到索引,例如:T1表的ID列存在索引,且非空。则以下查询用到索引:SELECT*FROMT1ORDERBYID;十二、避开使用NOT在查询时常常在WHERE子句使用一些规律表达式,如大于、小于、等于以及不等于等等,也可以使用AND〔与、OR〔或〕以及NOT〔非。NOT可用来对任何规律运算符号取反。下NOT子句的例子:...WHERENOT(STATUS=”VALID”)假设要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT运算符包含在另外一个规律运算符中,这就是不等于〔<>〕运算符。换句话说,即使不在查询WHERENOT词,NOT仍在运算符中,见下例:...WHERESTATUS<>”INVALID”;再看下面这个例子:SELECT*FROMEMPLOYEEWHERESALARY<>3000;对这个查询,可以改写为不使用NOT:SELECT*FROMEMPLOYEEWHERESALARY<3000ORSALARY>3000;虽然这两种查询的结果一样,但是其次种查询方案会比第一种查询方案更快些。其次种查ORACLESALARY列使用索引,而第一种查询则不能使用索引。十三、使用DECODE函数削减处理时间使用DECODE函数可以避开重复扫描一样记录或重复连接一样的表。例如:SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020ANDENAMELIKE SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKE ”SMITH%”;可以用DECODE函数高效地得到一样结果SELECTCOUNT(DECODE(DEPT_NO,0020,”X”,NULL))D0020_COUNT,COUNT(DECODE(DEPT_NO,0030,”X”,NULL))D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SALFROMEMPWHEREENAMELIKE”SMITH%”;类似的,DECODE函数也可以运用于GROUPBYORDERBY子句中。十四、删除重复记录DELETEDELETEFROMEMPEWHEREWHEREE.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO==E.EMP_NO);十五、假设可以使用WHERE条件,尽量不要在HAVING中限制数据十六、尽量不要使数据排序带有DISTINCT、UNION、MINUS、INTERSECT、ORDERBY、GROUPBY的SQL语句会启动SQL引擎执行消耗资源的排序(SORT)功能。DISTINCT需要一次排序操作,而其他的至少需要执行两次排序,影响查询的效率。十七、避开转变索引列类型当比较不同数据类型的数据时,ORACLE自动对列进展简洁的类型转换。假设EMPNO是一个数值类型的索引列。SELECT*FROMEMPWHEREEMPNO=‘123’;实际上,经过ORACLE类型转换,语句转化为:SELECT*FROMEMPWHEREEMPNO=TO_NUMBER(‘123”);但是类型转换没有发生在索引列上,索引的用途没有被转变。假设,EMP_TYPE是一个字符类型的索引列。SELECT*FROMEMPWHEREEMP_TYPE=123;这个语句被ORACLE转换为:SELECT*FROMEMPWHERETO_NUMBER(EMP_TYPE)=123;由于内部发生的类型转换,索引将不会被用到。十八、避开在索引列上使用计算WHERE低效:SELECT*FROMDEPTWHERESAL*12>25000;高效:SELECT*FROMDEPTWHERESAL>25000/12;十九、避开在索引列上使用ISNULLISNOTNULLORACLE将无法使用该索引。对于单列索引,假设列包含空值,索引中将不存在此记录。对于复合索引,假设每个列都为空,索引中同样不存在此记录。假设至少有一个列不为空,则记录存在于索引中。例如:假设唯一性索引建立在表的A列和BB值为(12null)ORACLE将不承受下一条具有一样A,B值〔123,null〕的记录(插入)。然而假设全部的索引列都为空,ORACLE将认为整个键值为空,而空不等于空。因此可以无限条空记录。因空值不存在于索引列中,所以WHERE子句中对索引列进展空值比较将使ORACLE停用该索引。例如:低效:(索引失效)SELECT…FROMDEPARTMENTWHEREDEPT_CODEISNOTNULL;高效:(索引有效)SELECT…FROMDEPARTMENTWHEREDEPT_CODE>=0;二十、子查询改写成表连接通常来说,承受表连接的方式比子查询更有效率,但并不是全部的子查询都可以改写成表连接的形式。只有当连接字段存在唯一性时才可以进展改写。否则重复字段会产生笛卡尔积。例如:T1表存在以下数据:IDID2112223T2表存在以下数据:IDID21122324223子查询:SELECTCOUNT(*)FROMT1WHERET1.IDIN(SELECTIDFROMT2); 3表连接:SELECTCOUNT(*)FROMT1,T2WHERET1.ID=T2.ID;5二十一、使用索引的第一个列假设索引是建立在多个列上,只有在它的第一个列(leadingcolumn)被WHERE子句引用时,优化器才会选择使用该索引。二十二、削减对表的查询SELECTTAB_NAME在含有子查询的SQL语句中,要特别留意削减对表的查询。例如:SELECTTAB_NAMEFROMFROMTABLESWHEREWHERETAB_NAME=(SELECTTAB_NAMEFROMTAB_COLUMNSWHEREVERSIONVERSION=604)AND DB_VERAND DB_VER=(SELECTDB_VERFROMTAB_COLUMNSWHEREVERSION=604);604);SELECTSELECTTAB_NAMEFROMFROMTABLESWHEREWHERE(TAB_NAME,DB_VER)=(SELECT(SELECTTAB_NAME,DB_VERFROMTAB_COLUMNSWHEREVERSION==604);二十三、SQL语句中:用>=替代>IDSELECT*FROMEMPLOYEEWHEREID>=9要比语句SELECT*FROMEMPLOYEEWHEREID>8高效。这是由于前者DBMS将直接跳到第一个ID98DEPT9的记录。二十四、使用提示(hints)在ORACLE中,是通过为语句添加hints(提示)hints是ORACLE供给的一种机制,用来告知优化器依据指定方式生成执行打算。可以用hints实现:1、使用优化器的类型;2、基于代价优化器的优化目标,是ALL_ROWSFIRST_ROWS;3、表的访问路径,是全表扫描,还是索引扫描,还是直接利用ROWID;4、表之间的连接类型;5、表之间的连接挨次;6、语句的并行程度hints只应用在它们所在SQL语句块(由SELECT、UPDATE、DELETE关键字标识)上,对SQL语句或语句的其它局部没有影响。如对于使用UNION2SQL语句,假设只在一个SQL语句上有hints,则该hints不会影响另一个SQL语句。可以使用注释(COMMENT)来为一个语句添加hints,一个语句块只能有一个注释,而且注释只能放在SELECT、UPDATE、DELETE关键字的后面hints的语法:{DELETE|INSERT|SELECT|UPDATE}/*+hint[text][hint[text]]...*/或者{DELETE|INSERT|SELECT|UPDATE}--+hint[text][hint[text]]...注解:1、DELETE、INSERT、SELECT和UPDATE是标识一个语句块开头的关键字,包含提示的注释只能消灭在这些关键字的后面,否则提示无效。2、“+”号表示该注释是一个hints,该加号必需马上跟在”/*”的后面,中间不能有空格。3、假设包含多个提示,则每个提示之间需要用一个或多个空格隔开。4、texthint的注释性文本。假设没有正确的指定hints,ORACLE将无视该hints,并且不会给出任何错误。二十五、大批量数据导入大批量数据导入可能会导致UNDO表空间和REDOLOG满,对数据库的影响较大。可以承受分批提交的方法避开UNDOREDOLOG满的问题可添加/*+append*/提示避开,例如语句如下:ALTERTABLETAB1NOLOGGING;INSERT/*+APPEND*/INTOTAB1SELECT*FROMTAB2;COMMIT;ALTERTABLETAB1LOGGING;二十六、DBLINK使用通过网络传送到SQL发起端,再跟本地表进展关联得到最终结果,假设远端表返回的数据较多,则会影响查询的速度。例如:在YZDB3上执行以下语句:SELECT*FROMINFO.T_CI_CUSTINFO_A@YZDBBAWHERECUSTIDIN(SELECTATTACHCUSTIDFROMINFO.T_CI_USERINFO_EWHERESVCNUM=”139XXXXXXXX”);执行时间:165.078秒。假设改成从A库中取数据,速度会提高很多:SELECT*FROMINFO.T_CI_CUSTINFO_AWHERECUSTIDIN(SELECTATTACHCUSTIDWHERESVCNUM=”139XXXXXXXX”);执行时间:0.297秒。或通过driving_site强制指定主驱动表,即以所指定的表为主要表,将其它表作为从表提取到驱动表所在的库进展关联运算。例如:SELECT/*+DRIVING_SITE(A)*/*FROMINFO.T_CI_CUSTINFO_A@YZDBBAAWHERECUSTIDIN(SELECTATTACHCUSTIDFROMINFO.T_CI_USERINFO_EWHERESVCNUM=”139XXXXXXXX”);执行时间:0.031秒。另外,DBLINK中应尽量避开调用远程的存储过程。二十七、绑定变量使用建议1、Pro*C或OCI编程使用动态SQL时,必需承受绑定变量方式,已避开引起数据库性能问题。例如:ASQL//处理传入的参数,构造动态SQL语句sprintf(sztmp1,“SELECT\TO_CHAR(apply_date,”yyyymmddhh24miss”),\state,\FROMuser_smscall\WHERE\(gsm_user_id=”%s”)“,//SQL语句ora_gsm_user_id);B、绑定变量方式的动态SQL//SQL语句sprintf(sztmp1,“SELECT\TO_CHAR(apply_date,”yyyymmddhh24miss”),\state,\FROMuser_smscall\WHERE\(gsm_user_id=:v1)“);//SQL语句EXECSQLPREPAREsqlFROM:sqlstmt; //Prepare//定义游标EXECSQLdeclareuser_smscall_cu_1cursorforsql;EXECSQLOPENuser_smscall_cu_1USING:ora_gsm_user_id;//传变量值2cursor_sharing参数均设置为similar时,绑定变量的使用时应留意以下几点:使用绑定变量,以动态SQL替代静态SQL;该对象不能进展频繁的DDL操作;一样SQL的绑定变量值的类型,类型的长度定义需要完全全都;语句中对在收集了统计信息的列进展等于操作,不会使用绑定变量;通过DBLINK操作远程的对象时:SELECT语句必需使用绑定变量,能够避开较高的version_count;INSERTversion_count2种解决方法:SQL语句中使用绑定变量,对于INSERTNOAPPENDhint。INSERTINTO…TABLE@REMOTE...SELECT....2条。例如:A、首先将SELECT的相关字段的值放入绑定变量。如:INTO:v_b1,,:v_b2 ,:v_bnFROM<TABLE1>B、然后直接使用绑定变量的值对表进展插入操作。如:INSERTINTO<TABLE_NAME>@〔DBLINK〕(<col1>,<col2>,. <coln>)VALUES(:v_b1,v_b2. ,v_bn)第三章跟踪SQL执行打算一、相关理论1、ORACLE优化器Oracle3种:基于规章RULECOSTCHOOSE设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数设置,也可以在会话(session)级对其进展掩盖。OPTIMZER_MODE=RULE,则激活基于规章的优化器(RBO)。基于规章的优化器依据一系列的语法规章来推想可能执行路径和比较可替换的执行路径。假设OPTIMZER_MODE=COST(CBO)ANALYZE语句来生成数据库对象的统计数据。这些统计数据包括表的行数、平均长度及索引中不同的关键字数等。基于这些统计数据,本钱优化器可以计算出可获得的执行路径CBOANALYZE命令来确保数据的准确性。假设OPTIMZER_MODE=CHOOSE,实际的优化器模式将和是否运行过analyze命table已经被analyzeCBO形式的优化器。2TABLE的方式ORACLE承受两种访问表中记录的方式:全表扫描全表扫描就是挨次地访问表中每条记录。ORACLE承受一次读入多个数据块的方式优化全表扫描。ROWID定位访问ORACLE承受索引实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引ROWID的方法,因此基于索引列的查询可以得到性能上的提高。3、索引访问方式Oracle有两种索引访问方式1〕(INDEXUNIQUESCAN)如:表LOADING有两个索引:建立在LOADING列上的唯一性索引LOADING_PK和建立在MANAGER列上的非唯一性索引IDX_MANAGER。SELECT*FROMLOADINGWHERELOADING=‘ROSEHILL’在内部,上述SQL将被分成两步执行,首先LOADING_PK索引将通过索引唯一扫描的方式被访问,获得相对应的ROWIDROWID访问表的方式执行下一步检索。假设被检索返回的列包括INDEXORACLE将不执行其次
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新高考化学全国卷二轮复习易错卷含解析
- 2026年高考全国丙卷数学数列通项与求和冲刺卷含解析
- 电子设备机械装校工岗前实操知识技能考核试卷含答案
- 送配电线路检修工岗前基础验收考核试卷含答案
- 纺织面料设计师安全技能测试考核试卷含答案
- 农产品购销员风险识别竞赛考核试卷含答案
- 硫酸铵生产工班组评比能力考核试卷含答案
- 虚拟电厂发展难题
- 《短视频制作》课件 项目二 探寻短视频制作流程
- 2026年高职(市场营销)实训阶段测试试题及答案
- 2025年下半年浙江杭州市萧山区国有企业招聘人员笔试历年参考题库附带答案详解
- 2026年70周岁以上驾驶人三力测试模拟题
- 2026年4月23日四川省宜宾市五方面人员选拔笔试真题及答案深度解析
- 2025年四川省从“五方面人员”中选拔乡镇领导班子成员考试历年参考题库含答案详解
- GB/T 17498.6-2026室内固定式健身器材第6部分:跑步机附加的特殊安全要求和试验方法
- Costco开市客数据应用研究
- 2026宁夏农垦酒业有限公司社会招聘3人备考题库及答案详解(名校卷)
- 上海市建设工程责任终身制承诺书
- 浙江省教师资格认定体检标准
- 轻钢龙骨硅酸钙板防火墙施工方案
- 《材料分析测试技术》全套教学课件
评论
0/150
提交评论