仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 849|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页编程之ORACLE SQL功能优化系列 (二)

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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支持,访问内容丰富的在线知识库和联系一个专门的技术负责经理。
兰色精灵 该用户已被删除
沙发
发表于 2015-1-19 16:24:58 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-28 08:26:33 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-5 15:41:38 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
小女巫 该用户已被删除
5#
发表于 2015-2-12 19:40:53 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
海妖 该用户已被删除
6#
发表于 2015-3-3 06:20:34 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
莫相离 该用户已被删除
7#
发表于 2015-3-11 09:42:18 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-18 03:25:31 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
9#
发表于 2015-3-25 10:48:02 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 15:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表