MYSQL教程之ORACLE经常使用傻瓜}1000(之五)
你会发现实际上MySQL可以更少地占用资金,前者的每CPU许可费用一般从4000美元到25000美元不等,而MySQL企业版的支持和维护成本就更低了。oracleORACLE经常使用傻瓜}1000(之五)
作者:CCBZZP
人人在ORACLE的r候大概龅胶芏嗫雌聿浑y的},特eπ率碚f,明天我伟阉Y一下,l布o人人,但愿Υ蠹矣助!和人人一同探,配合M步!
ORACLE妙手碚f是不必看的.
本讲次要讲的是SQL语句的优化办法!次要基于ORACLE9I的.
174./*+ALL_ROWS*/
标明对语句块选择基于开支的优化办法,并取得最好吞吐量,使资本损耗最小化.
比方:
SELECT/*+ALL+_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=CCBZZP;
175./*+FIRST_ROWS*/
标明对语句块选择基于开支的优化办法,并取得最好呼应工夫,使资本损耗最小化.
比方:
SELECT/*+FIRST_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=CCBZZP;
176./*+CHOOSE*/
标明假如数据字典中有会见表的统计信息,将基于开支的优化办法,并取得最好的吞吐量;
标明假如数据字典中没有会见表的统计信息,将基于划定规矩开支的优化办法;
比方:
SELECT/*+CHOOSE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=CCBZZP;
177./*+RULE*/
标明对语句块选择基于划定规矩的优化办法.
比方:
SELECT/*+RULE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=CCBZZP;
178./*+FULL(TABLE)*/
标明对表选择全局扫描的办法.
比方:
SELECT/*+FULL(A)*/EMP_NO,EMP_NAMFROMBSEMPMSAWHEREEMP_NO=CCBZZP;
179./*+ROWID(TABLE)*/
提醒明白标明对指定表依据ROWID举行会见.
比方:
SELECT/*+ROWID(BSEMPMS)*/*FROMBSEMPMSWHEREROWID>=AAAAAAAAAAAAAA
ANDEMP_NO=CCBZZP;
180./*+CLUSTER(TABLE)*/
提醒明白标明对指定表选择簇扫描的会见办法,它只对簇工具无效.
比方:
SELECT/*+CLUSTER*/BSEMPMS.EMP_NO,DPT_NOFROMBSEMPMS,BSDPTMS
WHEREDPT_NO=TEC304ANDBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
181./*+INDEX(TABLEINDEX_NAME)*/
标明对表选择索引的扫描办法.
比方:
SELECT/*+INDEX(BSEMPMSSEX_INDEX)USESEX_INDEXBECAUSETHEREAREFEWMALEBSEMPMS*/FROMBSEMPMSWHERESEX=M;
182./*+INDEX_ASC(TABLEINDEX_NAME)*/
标明对表选择索引升序的扫描办法.
比方:
SELECT/*+INDEX_ASC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO=CCBZZP;
183./*+INDEX_COMBINE*/
为指定表选择位图会见路经,假如INDEX_COMBINE中没有供应作为参数的索引,将选择出位图索引的
布尔组合体例.
比方:
SELECT/*+INDEX_COMBINE(BSEMPMSSAL_BMIHIREDATE_BMI)*/*FROMBSEMPMS
WHERESAL<5000000ANDHIREDATE<SYSDATE;
184./*+INDEX_JOIN(TABLEINDEX_NAME)*/
提醒明白命令优化器利用索引作为会见路径.
比方:
SELECT/*+INDEX_JOIN(BSEMPMSSAL_HMIHIREDATE_BMI)*/SAL,HIREDATE
FROMBSEMPMSWHERESAL<60000;
185./*+INDEX_DESC(TABLEINDEX_NAME)*/
标明对表选择索引降序的扫描办法.
比方:
SELECT/*+INDEX_DESC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO=CCBZZP;
186./*+INDEX_FFS(TABLEINDEX_NAME)*/
对指定的表实行疾速全索引扫描,而不是全表扫描的举措.
比方:
SELECT/*+INDEX_FFS(BSEMPMSIN_EMPNAM)*/*FROMBSEMPMSWHEREDPT_NO=TEC305;
187./*+ADD_EQUALTABLEINDEX_NAM1,INDEX_NAM2,...*/
提醒明白举行实行计划的选择,将几个单列索引的扫描合起来.
比方:
SELECT/*+INDEX_FFS(BSEMPMSIN_DPTNO,IN_EMPNO,IN_SEX)*/*FROMBSEMPMSWHEREEMP_NO=CCBZZPANDDPT_NO=TDC306;
188./*+USE_CONCAT*/
对查询中的WHERE前面的OR前提举行转换为UNIONALL的组合查询.
比方:
SELECT/*+USE_CONCAT*/*FROMBSEMPMSWHEREDPT_NO=TDC506ANDSEX=M;
189./*+NO_EXPAND*/
关于WHERE前面的OR大概IN-LIST的查询语句,NO_EXPAND将制止其基于优化器对其举行扩大.
比方:
SELECT/*+NO_EXPAND*/*FROMBSEMPMSWHEREDPT_NO=TDC506ANDSEX=M;
190./*+NOWRITE*/
克制对查询块的查询重写操纵.
191./*+REWRITE*/
能够将视图作为参数.
192./*+MERGE(TABLE)*/
可以对视图的各个查询举行响应的兼并.
比方:
SELECT/*+MERGE(V)*/A.EMP_NO,A.EMP_NAM,B.DPT_NOFROMBSEMPMSA(SELETDPT_NO
,AVG(SAL)ASAVG_SALFROMBSEMPMSBGROUPBYDPT_NO)VWHEREA.DPT_NO=V.DPT_NO
ANDA.SAL>V.AVG_SAL;
193./*+NO_MERGE(TABLE)*/
关于有可兼并的视图不再兼并.
比方:
SELECT/*+NO_MERGE(V)*/A.EMP_NO,A.EMP_NAM,B.DPT_NOFROMBSEMPMSA(SELETDPT_NO
,AVG(SAL)ASAVG_SALFROMBSEMPMSBGROUPBYDPT_NO)VWHEREA.DPT_NO=V.DPT_NO
ANDA.SAL>V.AVG_SAL;
194./*+ORDERED*/
依据表呈现在FROM中的按次,ORDERED使ORACLE依此按次对其毗连.
比方:
SELECT/*+ORDERED*/A.COL1,B.COL2,C.COL3FROMTABLE1A,TABLE2B,TABLE3C
WHEREA.COL1=B.COL1ANDB.COL1=C.COL1;
195./*+USE_NL(TABLE)*/
将指定表与嵌套的毗连的行源举行毗连,并把指定表作为外部表.
比方:
SELECT/*+ORDEREDUSE_NL(BSEMPMS)*/BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAMFROMBSEMPMS,BSDPTMSWHEREBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
196./*+USE_MERGE(TABLE)*/
将指定的表与其他行源经由过程兼并排序毗连体例毗连起来.
比方:
SELECT/*+USE_MERGE(BSEMPMS,BSDPTMS)*/*FROMBSEMPMS,BSDPTMSWHERE
BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
197./*+USE_HASH(TABLE)*/
将指定的表与其他行源经由过程哈希毗连体例毗连起来.
比方:
SELECT/*+USE_HASH(BSEMPMS,BSDPTMS)*/*FROMBSEMPMS,BSDPTMSWHERE
BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
198./*+DRIVING_SITE(TABLE)*/
强迫与ORACLE所选择的地位分歧的表举行查询实行.
比方:
SELECT/*+DRIVING_SITE(DEPT)*/*FROMBSEMPMS,DEPT@BSDPTMSWHEREBSEMPMS.DPT_NO=DEPT.DPT_NO;
199./*+LEADING(TABLE)*/
将指定的表作为毗连序次中的首表.
200./*+CACHE(TABLE)*/
当举行全表扫描时,CACHE提醒可以将表的检索块安排在缓冲区缓存中比来起码列表LRU的比来利用端
比方:
SELECT/*+FULL(BSEMPMS)CAHE(BSEMPMS)*/EMP_NAMFROMBSEMPMS;
201./*+NOCACHE(TABLE)*/
当举行全表扫描时,CACHE提醒可以将表的检索块安排在缓冲区缓存中比来起码列表LRU的比来利用端
比方:
SELECT/*+FULL(BSEMPMS)NOCAHE(BSEMPMS)*/EMP_NAMFROMBSEMPMS;
202./*+APPEND*/
间接拔出到表的最初,能够进步速率.
insert/*+append*/intotest1select*fromtest4;
203./*+NOAPPEND*/
经由过程在拔出语句保存期内中断并行形式来启动惯例拔出.
insert/*+noappend*/intotest1select*fromtest4;
待续...
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。 相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐 多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。 对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 我个人认为就是孜孜不懈的学习 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
页:
[1]