|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务优化|语句在SQL语句优化过程当中,我们常常会用到hint,现总结一下在SQL优化过程当中罕见OracleHINT的用法:
1./*+ALL_ROWS*/
标明对语句块选择基于开支的优化办法,并取得最好吞吐量,使资本损耗最小化.
比方:
SELECT/*+ALL+_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=SCOTT;
2./*+FIRST_ROWS*/
标明对语句块选择基于开支的优化办法,并取得最好呼应工夫,使资本损耗最小化.
比方:
SELECT/*+FIRST_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=SCOTT;
3./*+CHOOSE*/
标明假如数据字典中有会见表的统计信息,将基于开支的优化办法,并取得最好的吞吐量;
标明假如数据字典中没有会见表的统计信息,将基于划定规矩开支的优化办法;
比方:
SELECT/*+CHOOSE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=SCOTT;
4./*+RULE*/
标明对语句块选择基于划定规矩的优化办法.
比方:
SELECT/*+RULE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO=SCOTT;
5./*+FULL(TABLE)*/
标明对表选择全局扫描的办法.
比方:
SELECT/*+FULL(A)*/EMP_NO,EMP_NAMFROMBSEMPMSAWHEREEMP_NO=SCOTT;
6./*+ROWID(TABLE)*/
提醒明白标明对指定表依据ROWID举行会见.
比方:
SELECT/*+ROWID(BSEMPMS)*/*FROMBSEMPMSWHEREROWID>=AAAAAAAAAAAAAA
ANDEMP_NO=SCOTT;
7./*+CLUSTER(TABLE)*/
提醒明白标明对指定表选择簇扫描的会见办法,它只对簇工具无效.
比方:
SELECT/*+CLUSTER*/BSEMPMS.EMP_NO,DPT_NOFROMBSEMPMS,BSDPTMS
WHEREDPT_NO=TEC304ANDBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
8./*+INDEX(TABLEINDEX_NAME)*/
标明对表选择索引的扫描办法.
比方:
SELECT/*+INDEX(BSEMPMSSEX_INDEX)USESEX_INDEXBECAUSETHEREAREFEWMALEBSEMPMS*/FROMBSEMPMSWHERESEX=M;
9./*+INDEX_ASC(TABLEINDEX_NAME)*/
标明对表选择索引升序的扫描办法.
比方:
SELECT/*+INDEX_ASC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO=SCOTT;
10./*+INDEX_COMBINE*/
为指定表选择位图会见路经,假如INDEX_COMBINE中没有供应作为参数的索引,将选择出位图索引的布尔组合体例.
比方:
SELECT/*+INDEX_COMBINE(BSEMPMSSAL_BMIHIREDATE_BMI)*/*FROMBSEMPMS
WHERESAL<5000000ANDHIREDATE<SYSDATE;
11./*+INDEX_JOIN(TABLEINDEX_NAME)*/
提醒明白命令优化器利用索引作为会见路径.
比方:
SELECT/*+INDEX_JOIN(BSEMPMSSAL_HMIHIREDATE_BMI)*/SAL,HIREDATE
FROMBSEMPMSWHERESAL<60000;
12./*+INDEX_DESC(TABLEINDEX_NAME)*/
标明对表选择索引降序的扫描办法.
比方:
SELECT/*+INDEX_DESC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO=SCOTT;
13./*+INDEX_FFS(TABLEINDEX_NAME)*/
对指定的表实行疾速全索引扫描,而不是全表扫描的举措.
比方:
SELECT/*+INDEX_FFS(BSEMPMSIN_EMPNAM)*/*FROMBSEMPMSWHEREDPT_NO=TEC305;
14./*+ADD_EQUALTABLEINDEX_NAM1,INDEX_NAM2,...*/
提醒明白举行实行计划的选择,将几个单列索引的扫描合起来.
比方:
SELECT/*+INDEX_FFS(BSEMPMSIN_DPTNO,IN_EMPNO,IN_SEX)*/*FROMBSEMPMSWHEREEMP_NO=SCOTTANDDPT_NO=TDC306;
15./*+USE_CONCAT*/
对查询中的WHERE前面的OR前提举行转换为UNIONALL的组合查询.
比方:
SELECT/*+USE_CONCAT*/*FROMBSEMPMSWHEREDPT_NO=TDC506ANDSEX=M;
16./*+NO_EXPAND*/
关于WHERE前面的OR大概IN-LIST的查询语句,NO_EXPAND将制止其基于优化器对其举行扩大.
比方:
SELECT/*+NO_EXPAND*/*FROMBSEMPMSWHEREDPT_NO=TDC506ANDSEX=M;
17./*+NOWRITE*/
克制对查询块的查询重写操纵.
18./*+REWRITE*/
能够将视图作为参数.
19./*+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;
20./*+NO_MERGE(TABLE)*/
关于有可兼并的视图不再兼并.
比方:
SELECT/*+NO_MERGE(V)*/A.EMP_NO,A.EMP_NAM,B.DPT_NOFROMBSEMPMSA(SELECTDPT_NO,AVG(SAL)ASAVG_SALFROMBSEMPMSBGROUPBYDPT_NO)VWHEREA.DPT_NO=V.DPT_NOANDA.SAL>V.AVG_SAL;
21./*+ORDERED*/
依据表呈现在FROM中的按次,ORDERED使ORACLE依此按次对其毗连.
比方:
SELECT/*+ORDERED*/A.COL1,B.COL2,C.COL3FROMTABLE1A,TABLE2B,TABLE3CWHEREA.COL1=B.COL1ANDB.COL1=C.COL1;
22./*+USE_NL(TABLE)*/
将指定表与嵌套的毗连的行源举行毗连,并把指定表作为外部表.
比方:
SELECT/*+ORDEREDUSE_NL(BSEMPMS)*/BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAMFROMBSEMPMS,BSDPTMSWHEREBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
23./*+USE_MERGE(TABLE)*/
将指定的表与其他行源经由过程兼并排序毗连体例毗连起来.
比方:
SELECT/*+USE_MERGE(BSEMPMS,BSDPTMS)*/*FROMBSEMPMS,BSDPTMSWHEREBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
24./*+USE_HASH(TABLE)*/
将指定的表与其他行源经由过程哈希毗连体例毗连起来.
比方:
SELECT/*+USE_HASH(BSEMPMS,BSDPTMS)*/*FROMBSEMPMS,BSDPTMSWHEREBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
25./*+DRIVING_SITE(TABLE)*/
强迫与ORACLE所选择的地位分歧的表举行查询实行.
比方:
SELECT/*+DRIVING_SITE(DEPT)*/*FROMBSEMPMS,DEPT@BSDPTMSWHEREBSEMPMS.DPT_NO=DEPT.DPT_NO;
26./*+LEADING(TABLE)*/
将指定的表作为毗连序次中的首表.
27./*+CACHE(TABLE)*/
当举行全表扫描时,CACHE提醒可以将表的检索块安排在缓冲区缓存中比来起码列表LRU的比来利用端
比方:
SELECT/*+FULL(BSEMPMS)CAHE(BSEMPMS)*/EMP_NAMFROMBSEMPMS;
28./*+NOCACHE(TABLE)*/
当举行全表扫描时,CACHE提醒可以将表的检索块安排在缓冲区缓存中比来起码列表LRU的比来利用端
比方:
SELECT/*+FULL(BSEMPMS)NOCAHE(BSEMPMS)*/EMP_NAMFROMBSEMPMS;
29./*+APPEND*/
间接拔出到表的最初,能够进步速率.
insert/*+append*/intotest1select*fromtest4;
30./*+NOAPPEND*/
经由过程在拔出语句保存期内中断并行形式来启动惯例拔出.
insert/*+noappend*/intotest1select*fromtest4;
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。 |
|