|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你碰到的问题可能已经在社区中被别的人已经问过,即使没有MySQL学习教程,你也可以提出问题或通过Google来搜索答案。社区的相关负责人士:“MySQL社区是活跃、友好和内容渊博的。”oracle|功能|优化
4.选择最无效率的表名按次(只在基于划定规矩的优化器中无效)
ORACLE的剖析器依照从右到左的按次处置FROM子句中的表名,因而FROM子句中写在最初的表(基本表drivingtable)将被开始处置.在FROM子句中包括多个表的情形下,你必需选择纪录条数起码的表作为基本表.当ORACLE处置多个表时,会使用排序及兼并的体例毗连它们.起首,扫描第一个表(FROM子句中最初的谁人表)并对纪录举行派序,然后扫描第二个表(FROM子句中最初第二个表),最初将一切从第二个表中检索出的纪录与第一个表中符合纪录举行兼并.
比方:
表TAB116,384笔记录
表TAB21笔记录
选择TAB2作为基本表(最好的办法)
selectcount(*)fromtab1,tab2实行工夫0.96秒
选择TAB2作为基本表(欠安的办法)
selectcount(*)fromtab2,tab1实行工夫26.09秒
假如有3个以上的表毗连查询,那就必要选择交织表(intersectiontable)作为基本表,交织表是指谁人被其他表所援用的表.
比方:
EMP表形貌了LOCATION表和CATEGORY表的交集.
SELECT*
FROMLOCATIONL,
CATEGORYC,
EMPE
WHEREE.EMP_NOBETWEEN1000AND2000
ANDE.CAT_NO=C.CAT_NO
ANDE.LOCN=L.LOCN
将比以下SQL更无效率
SELECT*
FROMEMPE,
LOCATIONL,
CATEGORYC
WHEREE.CAT_NO=C.CAT_NO
ANDE.LOCN=L.LOCN
ANDE.EMP_NOBETWEEN1000AND2000
5.WHERE子句中的毗连按次.
ORACLE接纳自下而上的按次剖析WHERE子句,依据这个道理,表之间的毗连必需写在其他WHERE前提之前,那些能够过滤失落最年夜数目纪录的前提必需写在WHERE子句的开端.
比方:
(低效,实行工夫156.3秒)
SELECT…
FROMEMPE
WHERESAL>50000
ANDJOB=‘MANAGER’
AND25<(SELECTCOUNT(*)FROMEMP
WHEREMGR=E.EMPNO);
(高效,实行工夫10.6秒)
SELECT…
FROMEMPE
WHERE25<(SELECTCOUNT(*)FROMEMP
WHEREMGR=E.EMPNO)
ANDSAL>50000
ANDJOB=‘MANAGER’;
6.SELECT子句中制止利用‘*‘
当你想在SELECT子句中列出一切的COLUMN时,利用静态SQL列援用‘*’是一个便利的办法.不幸的是,这是一个十分低效的办法.实践上,ORACLE在剖析的过程当中,会将’*’顺次转换成一切的列名,这个事情是经由过程查询数据字典完成的,这意味着将泯灭更多的工夫.
7.削减会见数据库的次数
当实行每条SQL语句时,ORACLE在外部实行了很多事情:剖析SQL语句,预算索引的使用率,绑定变量,读数据块等等.因而可知,削减会见数据库的次数,就可以实践上削减ORACLE的事情量.
比方,
以下有三种办法能够检索出雇员号即是0342或0291的人员.
办法1(最低效)
SELECTEMP_NAME,SALARY,GRADE
FROMEMP
WHEREEMP_NO=342;
SELECTEMP_NAME,SALARY,GRADE
FROMEMP
WHEREEMP_NO=291;
办法2(次低效)
DECLARE
CURSORC1(E_NONUMBER)IS
SELECTEMP_NAME,SALARY,GRADE
FROMEMP
WHEREEMP_NO=E_NO;
BEGIN
OPENC1(342);
FETCHC1INTO…,..,..;
…..
OPENC1(291);
FETCHC1INTO…,..,..;
CLOSEC1;
END;
办法3(高效)
SELECTA.EMP_NAME,A.SALARY,A.GRADE,
B.EMP_NAME,B.SALARY,B.GRADE
FROMEMPA,EMPB
WHEREA.EMP_NO=342
ANDB.EMP_NO=291;
注重:
在SQL*Plus,SQL*Forms和Pro*C中从头设置ARRAYSIZE参数,能够增添每次数据库会见的检索数据量,倡议值为200
(待续)
通过支付一定费用,客户可以得到优先的24/7支持,访问内容丰富的在线知识库和联系一个专门的技术负责经理。 |
|