仓酷云

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

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

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

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

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

x
DBaaS会导致单一客户利润率的下降,因为云服务一般是依靠MySQL学习教程数来抵消较低的利润率。oracle|功能|优化
39.老是利用索引的第一个列

假如索引是创建在多个列上,只要在它的第一个列(leadingcolumn)被where子句援用时,优化器才会选择利用该索引.



译者按:

这也是一条复杂而主要的划定规矩.见以下实例.



SQL>createtablemultiindexusage(indanumber,indbnumber,descrvarchar2(10));

Tablecreated.

SQL>createindexmultindexonmultiindexusage(inda,indb);

Indexcreated.

SQL>setautotracetraceonly



SQL>select*frommultiindexusagewhereinda=1;

ExecutionPlan

----------------------------------------------------------

0SELECTSTATEMENTOptimizer=CHOOSE

10TABLEACCESS(BYINDEXROWID)OFMULTIINDEXUSAGE

21INDEX(RANGESCAN)OFMULTINDEX(NON-UNIQUE)



SQL>select*frommultiindexusagewhereindb=1;

ExecutionPlan

----------------------------------------------------------

0SELECTSTATEMENTOptimizer=CHOOSE

10TABLEACCESS(FULL)OFMULTIINDEXUSAGE



很分明,当仅援用索引的第二个列时,优化器利用了全表扫描而疏忽了索引





40.ORACLE外部操纵

当实行查询时,ORACLE接纳了外部的操纵.下表显现了几种主要的外部操纵.

ORACLEClause

外部操纵

ORDERBY

SORTORDERBY

UNION

UNION-ALL

MINUS

MINUS

INTERSECT

INTERSECT

DISTINCT,MINUS,INTERSECT,UNION

SORTUNIQUE

MIN,MAX,COUNT

SORTAGGREGATE

GROUPBY

SORTGROUPBY

ROWNUM

COUNTorCOUNTSTOPKEY

QueriesinvolvingJoins

SORTJOIN,MERGEJOIN,NESTEDLOOPS

CONNECTBY

CONNECTBY





41.用UNION-ALL交换UNION(假如有大概的话)



当SQL语句必要UNION两个查询了局汇合时,这两个了局汇合会以UNION-ALL的体例被兼并,然后在输入终极了局行进行排序.

假如用UNIONALL替换UNION,如许排序就不是需要了.效力就会因而失掉进步.



举例:

低效:

    SELECTACCT_NUM,BALANCE_AMT

FROMDEBIT_TRANSACTIONS

WHERETRAN_DATE=’31-DEC-95’

UNION

SELECTACCT_NUM,BALANCE_AMT

FROMDEBIT_TRANSACTIONS

WHERETRAN_DATE=’31-DEC-95’

高效:

SELECTACCT_NUM,BALANCE_AMT

FROMDEBIT_TRANSACTIONS

WHERETRAN_DATE=’31-DEC-95’

UNIONALL

SELECTACCT_NUM,BALANCE_AMT

FROMDEBIT_TRANSACTIONS

WHERETRAN_DATE=’31-DEC-95’



译者按:

必要注重的是,UNIONALL将反复输入两个了局汇合中不异纪录.因而列位仍是

要从营业需求剖析利用UNIONALL的可行性.

UNION将对了局汇合排序,这个操纵会利用到SORT_AREA_SIZE这块内存.关于这

块内存的优化也是相称主要的.上面的SQL能够用来查询排序的损耗量



Selectsubstr(name,1,25)"SortAreaName",

substr(value,1,15)"Value"

fromv$sysstat

wherenamelikesort%



42.利用提醒(Hints)

关于表的会见,可使用两种Hints.

FULL和ROWID



FULLhint告知ORACLE利用全表扫描的体例会见指定表.

比方:

SELECT/*+FULL(EMP)*/*

FROMEMP

WHEREEMPNO=7893;



ROWIDhint告知ORACLE利用TABLEACCESSBYROWID的操纵会见表.



一般,你必要接纳TABLEACCESSBYROWID的体例出格是当会见年夜表的时分,利用这类体例,你必要晓得ROIWD的值大概利用索引.

假如一个年夜表没有被设定为缓存(CACHED)表而你但愿它的数据在查询停止是仍旧停止

在SGA中,你就能够利用CACHEhint来告知优化器把数据保存在SGA中.一般CACHEhint和FULLhint一同利用.

比方:

SELECT/*+FULL(WORKER)CACHE(WORKER)*/*

FROMWORK;



索引hint告知ORACLE利用基于索引的扫描体例.你不用申明详细的索引称号

比方:

SELECT/*+INDEX(LODGING)*/LODGING

FROMLODGING

WHEREMANAGER=‘BILLGATES’;



在不利用hint的情形下,以上的查询应当也会利用索引,但是,假如该索引的反复值过量而你的优化器是CBO,优化器便可能疏忽索引.在这类情形下,你能够用INDEXhint强迫ORACLE利用该索引.



ORACLEhints还包含ALL_ROWS,FIRST_ROWS,RULE,USE_NL,USE_MERGE,USE_HASH等等.



译者按:

利用hint,暗示我们对ORACLE优化器缺省的实行路径不中意,必要手工修正.

这是一个很有技能性的事情.我倡议只针对特定的,多数的SQL举行hint的优化.

对ORACLE的优化器仍是要有信念(出格是CBO)


MySQL采用双重授权(DualLicensed),它们是GPL和MySQLAB制定的商业许可协议。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-17 06:51:57 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
海妖 该用户已被删除
板凳
发表于 2015-1-29 09:49:12 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
山那边是海 该用户已被删除
地板
发表于 2015-2-6 00:19:09 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
不帅 该用户已被删除
5#
发表于 2015-2-14 14:32:23 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-4 07:10:06 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
老尸 该用户已被删除
7#
发表于 2015-3-11 17:52:07 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
admin 该用户已被删除
8#
发表于 2015-3-19 04:50:54 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
飘灵儿 该用户已被删除
9#
 楼主| 发表于 2015-3-27 08:09:24 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-1 12:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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